c說話斷定能否素數法式代碼。本站提示廣大學習愛好者:(c說話斷定能否素數法式代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是c說話斷定能否素數法式代碼正文
#include <stdio.h>
bool isPrimeNum(int x)
{
if (x == 1)
return false;
else if (x <= 0)
return false;
else if (x == 2)
return true;
else
{
for (int i = 2; i < x; i++)
{
if (x%i == 0)
return false;
}
return true;
}
}
int main(void)
{
int x;
char ch;
do{
printf("請輸出一個年夜於1的天然數:\n");
scanf("%d", &x);
if (isPrimeNum(x) == false)
printf("%d不是素數\n",x);
else if (isPrimeNum(x) == true)
printf("%d是素數\n",x);
printf("能否持續(y/n):\n");
scanf("%c", &ch);
}while ('y'== ch || 'Y' == ch);
return 0;
}
然則,運轉的時刻,湧現了一個成績.
原來寫do...while是為了省事,反復斷定.然則,卻愣是不起後果.
後來,修正了一下:
#include <stdio.h>
bool isPrimeNum(int x)
{
if (x == 1)
return false;
else if (x <= 0)
return false;
else if (x == 2)
return true;
else
{
for (int i = 2; i < x; i++)
{
if (x%i == 0)
return false;
}
return true;
}
}
int main(void)
{
int x;
char ch;
do{
printf("請輸出一個年夜於1的天然數:\n");
scanf("%d", &x);
if (isPrimeNum(x) == false)
printf("%d不是素數\n",x);
else if (isPrimeNum(x) == true)
printf("%d是素數\n",x);
printf("能否持續(y/n):\n");
scanf(" %c", &ch);//在這裡加一個空格
}while ('y'==ch || 'Y' == ch);
return 0;
}
如許,成績就奇異地處理了.
再後來,再這麼改:
#include <stdio.h>
bool isPrimeNum(int x)
{
if (x == 1)
return false;
else if (x <= 0)
return false;
else if (x == 2)
return true;
else
{
for (int i = 2; i < x; i++)
{
if (x%i == 0)
return false;
}
return true;
}
}
int main(void)
{
int x;
char ch;
do{
printf("請輸出一個年夜於1的天然數:\n");
scanf("%d", &x);
if (isPrimeNum(x) == false)
printf("%d不是素數\n",x);
else if (isPrimeNum(x) == true)
printf("%d是素數\n",x);
printf("能否持續(y/n):\n");
scanf("\n%c", &ch);//在這裡加一個換行符 '\n'
}while ('y'==ch || 'Y' == ch);
return 0;
}
也沒成績.
所以,總結一下,成績湧現在我們在輸出數字按下回車的仿佛,'\n'還保留在輸出流中
是以,看第一個代碼:
int main(void)
{
int x;
char ch;
do{
printf("請輸出一個年夜於1的天然數:\n");
scanf("%d", &x);
if (isPrimeNum(x) == false)
printf("%d不是素數\n",x);
else if (isPrimeNum(x) == true)
printf("%d是素數\n",x);
printf("能否持續(y/n):\n");
scanf("%c", &ch); //由於 '\n'還在輸出流中 所以 就釀成了 ch = '\n';
}while ('y'==ch || 'Y' == ch); // 'y' != '\n' && 'Y' != '\n';
return 0; //是以法式就return了
}
別的,也是可使用fflush(stdin)清空輸出緩存區.
#include <stdio.h>
bool isPrimeNum(int x)
{
if (x == 1)
return false;
else if (x <= 0)
return false;
else if (x == 2)
return true;
else
{
for (int i = 2; i < x; i++)
{
if (x%i == 0)
return false;
}
return true;
}
}
int main(void)
{
int x;
char ch;
do{
printf("請輸出一個年夜於1的天然數:\n");
scanf("%d", &x);
if (isPrimeNum(x) == false)
printf("%d不是素數\n",x);
else if (isPrimeNum(x) == true)
printf("%d是素數\n",x);
printf("能否持續(y/n):\n");
fflush(stdin); //清空輸出緩存區
scanf("%c", &ch);
}while ('y'==ch || 'Y' == ch);
return 0;
}