此代码自行执行而不需要char"选择"在switch语句scanf("%c",&choose); switch(choose)
之前进行进一步处理。
printf("enter option 1,2,3 or 4 \n\n");
scanf("%c",&choose); // why it not ask to input char
switch(choose)
{
case '1': case '+':
{
printf("enter 1st value\n");
scanf("%f",&a);
printf("enter 2st value\n");
scanf("%f",&b);
c=a+b;
printf("%f + %f = %f",a,b,c);
break;
}
case '2': case '-':
{
printf("enter 1st value\n");
scanf("%f",&a);
printf("enter 2nd value\n");
scanf("%f",&b);
c=a-b;
printf("%f - %f = %f",a,b,c);
break;
}
case '3': case'*':
{
printf("enter 1st value\n");
scanf("%f",&a);
printf("enter 2nd value\n");
scanf("%f",&b);
c=a*b;
printf("%f * %f = %f",a,b,c);
break;
}
}
答案 0 :(得分:0)
可能是因为你之前已经输入了一些内容,所以缓冲区中还有未扫描的字符,这些#贪心" scanf()
然后不停地扫描。
您应该检查scanf()
的返回值,以了解它是否成功。
你应该切换到使用fgets()
读取整行,然后解析它。这样,它更安全,更容易预测。
答案 1 :(得分:0)
我已经毫无问题地执行了它(它得到了"选择" char):
#include <stdio.h>
int main(int argc, char *argv ) {
char choose;
float a,b,c;
printf("enter option 1,2,3 or 4 \n\n");
scanf("%c",&choose); // why it not ask to input char
switch(choose)
{
case '1': case '+':
{
printf("enter 1st value\n");
scanf("%f",&a);
printf("enter 2st value\n");
scanf("%f",&b);
c=a+b;
printf("%f + %f = %f",a,b,c);
break;
}
case '2': case '-':
{
printf("enter 1st value\n");
scanf("%f",&a);
printf("enter 2nd value\n");
scanf("%f",&b);
c=a-b;
printf("%f - %f = %f",a,b,c);
break;
}
case '3': case'*':
{
printf("enter 1st value\n");
scanf("%f",&a);
printf("enter 2nd value\n");
scanf("%f",&b);
c=a*b;
printf("%f * %f = %f",a,b,c);
break;
}
}
return 0;
}
可能是你之前没有读过的东西......
我猜你正在做类似的&#34; scanf(&#34;%c&#34;,&amp; choose);&#34;之前,所以下次阅读你会得到回车。
您可以尝试更改以下行:
scanf("%c",&choose);
有:
scanf("%c%*c",&choose);
...所以你放弃了\ n
如果这不能解决您的问题,也许您应该提供更多代码:)
答案 2 :(得分:0)
printf("enter option 1,2,3 or 4 \n\n");
scanf("%c",&choose);
如果您在上面给出的代码之前使用任何scanf
,那么在您的代码中,这种行为是预期的,因为前一个scanf
读取输入缓冲区中的\n
输入作为下一个scanf
的输入。
要解决此问题,请在fflush(stream)
之前使用scanf(...)
,这样可以解决问题。
fflush(stdin);
或者您可以使用getchar()
功能,这也可以解决您的问题。