Scanf 没有扫描 %c 字符而是跳过语句,这是为什么?
Scanf is not scanning %c character but skips the statement, why is that?
我使用 switch case 语句编写了一个程序并要求输入一个字符,但它不要求在控制台中输入该字符 window 而是完全跳过它
int main()
{
float a, b, ans;
char opr;
printf("\nGIVE THE VALUES OF THE TWO NUMBERS\n");
scanf(" %f %f",&a,&b);
printf("\nGIVE THE REQUIRED OPERATOR\n");
//no display(echo) on the screen
//opr = getch();
//displays on the screen
//opr = getche();
scanf("%c",&opr);
switch(opr)
{
case '+' :
ans = a+b;
printf("%f", ans);
break;
case '-' :
ans = a-b;
printf("%f", ans);
break;
case '*' :
ans = a*b;
printf("%f", ans);
break;
case '/' :
ans = a/b;
printf("%f", ans);
break;
case '%' :
ans = (int)a % (int)b;
printf("%f", ans);
break;
default :
printf("\nGIVE A VALID OPRATOR\n");
}
system("pause");
return 0;
但是当我在第二个 %c
之前放一个 space 时 scanf
它起作用了,有人在讲述一个白色的东西 space 我觉得很困惑
他说第二个 scanf
把 \n
的值作为一个字符,如果我在第二个 %c
之前放一个 space scanf
那不是一个字符,它不是以space作为字符吗?
但是在这个程序中并没有把\n
作为字符
int main()
{
char a;
printf("\ngive a char\n");
scanf("%c",&a);
printf("%c",a);
return 0;
}
这真的很令人困惑,任何人都可以帮助我,我想知道哪里出了问题。
第二个程序确实以\n
为字符。
可能你在输入其他字符之前根本没有输入\n
。
问题是您在未使用数字之后输入的 \n
被第二个 scanf()
读取。
如果您检查 opr
中的值,您会看到它是 '\n'。
每次使用这种格式的 scanf 时:
scanf("%c",&a);
它留下一个换行符,将在下一次迭代中使用。
您提到的最后一个程序只有一个 "scanf"。尝试使用另一个 scanf。你会遇到同样的问题。
所以为了避免白色 spaces 你必须写:
scanf(" %c",&opr);
格式字符串前的 space 告诉 scanf 忽略白色 spaces。或者最好使用
getchar();
它将消耗你所有的换行符
尝试在 scanf 之前添加 fflush(stdin)。
我使用 switch case 语句编写了一个程序并要求输入一个字符,但它不要求在控制台中输入该字符 window 而是完全跳过它
int main()
{
float a, b, ans;
char opr;
printf("\nGIVE THE VALUES OF THE TWO NUMBERS\n");
scanf(" %f %f",&a,&b);
printf("\nGIVE THE REQUIRED OPERATOR\n");
//no display(echo) on the screen
//opr = getch();
//displays on the screen
//opr = getche();
scanf("%c",&opr);
switch(opr)
{
case '+' :
ans = a+b;
printf("%f", ans);
break;
case '-' :
ans = a-b;
printf("%f", ans);
break;
case '*' :
ans = a*b;
printf("%f", ans);
break;
case '/' :
ans = a/b;
printf("%f", ans);
break;
case '%' :
ans = (int)a % (int)b;
printf("%f", ans);
break;
default :
printf("\nGIVE A VALID OPRATOR\n");
}
system("pause");
return 0;
但是当我在第二个 %c
之前放一个 space 时 scanf
它起作用了,有人在讲述一个白色的东西 space 我觉得很困惑
他说第二个 scanf
把 \n
的值作为一个字符,如果我在第二个 %c
之前放一个 space scanf
那不是一个字符,它不是以space作为字符吗?
但是在这个程序中并没有把\n
作为字符
int main()
{
char a;
printf("\ngive a char\n");
scanf("%c",&a);
printf("%c",a);
return 0;
}
这真的很令人困惑,任何人都可以帮助我,我想知道哪里出了问题。
第二个程序确实以\n
为字符。
可能你在输入其他字符之前根本没有输入\n
。
问题是您在未使用数字之后输入的 \n
被第二个 scanf()
读取。
如果您检查 opr
中的值,您会看到它是 '\n'。
每次使用这种格式的 scanf 时:
scanf("%c",&a);
它留下一个换行符,将在下一次迭代中使用。 您提到的最后一个程序只有一个 "scanf"。尝试使用另一个 scanf。你会遇到同样的问题。
所以为了避免白色 spaces 你必须写:
scanf(" %c",&opr);
格式字符串前的 space 告诉 scanf 忽略白色 spaces。或者最好使用
getchar();
它将消耗你所有的换行符
尝试在 scanf 之前添加 fflush(stdin)。