C 主函数中的循环运行错误
当我运行代码时,在main函数中出现了一些错误。在main的第一轮循环之后,程序打印“错误的选择”,尽管选择是合法的C 主函数中的循环运行错误,c,C,当我运行代码时,在main函数中出现了一些错误。在main的第一轮循环之后,程序打印“错误的选择”,尽管选择是合法的 #include <stdio.h> #include <stdlib.h> int factorial(int n); void prime_numbers(){ int upper_bound; printf("Define upper bound:"); scan
#include <stdio.h>
#include <stdlib.h>
int factorial(int n);
void prime_numbers(){
int upper_bound;
printf("Define upper bound:");
scanf("%d",&upper_bound);
printf("Prime Numbers: ");
int i,j;
int variable;
for (i=2;i<=upper_bound;i++)
{
variable = 1;
for (j = 2; j <i; j++)
{ if (i % j == 0)
{
variable = 0;
break;
}
}
if (variable == 1)
printf ("%d ", i );
}
printf("\n");
}
void leibniz_series(){
printf("Define k value:");
int k;
scanf("%d",&k);
double sum=0;
int i;
for (i=1; i<k; i++)
{
if ((i%2)==1)
sum=sum+1.0/((2.0 * (double)i) - 1.0);
else
sum = sum - 1.0/((2.0 * (double)i) - 1.0);
}
printf("Result:%f\n",4*sum);
}
void combination(){
int comb;
printf("Define n and r:");
int n,r;
scanf("%d %d",&n,&r);
comb=factorial(n)/(factorial(r)*factorial(n-r));
printf("Result:%d ",comb);
printf("\n");
}
int factorial(int n){
int f=1;
int i;
for(i=1;i<=n;i++)
f=f*i;
return f;
}
int main()
{
printf("Press P or p for Prime Numbers\n");
printf("Press L or l for Leibniz Series\n");
printf("Press C or c for Combinations\n");
printf("Press E or e for Exit\n");
char choice;
for(;;){
printf("Enter your choice:");
scanf("%c",&choice);
if(choice=='E' || choice=='e')
exit(0);
switch(choice){
case 'p' : prime_numbers();
break;
case 'P' : prime_numbers();
break;
case 'l' : leibniz_series();
break;
case 'L' : leibniz_series();
break;
case 'c' : combination();
break;
case 'C' : combination();
break;
default : printf("Wrong choice\n");
}
}
return 0;
}
#包括
#包括
整数阶乘(intn);
无效素数(){
int上界;
printf(“定义上限:”);
scanf(“%d”&上限);
printf(“质数:”);
int i,j;
int变量;
对于(i=2;i而言,这可能与您按下返回键来输入输入缓冲区中的输入有关
要简单地从缓冲区中清除该字符,您可以在从STDIN
扫描字符后立即添加scanf(“%*c”);
,读取并忽略该字符
因此,您的新代码如下所示:
printf("Enter your choice:");
scanf("%c",&choice);
scanf("%*c");
scanf(“%c”和&choice);
更改为scanf(“%c”和&choice);
。实际上,这在使用多字节行结尾的操作系统上不起作用,如windows/DOS