gpt4 book ai didi

c - scanf 不扫描 %c 字符而是跳过该语句,这是为什么?

转载 作者:行者123 更新时间:2023-12-02 04:17:48 26 4
gpt4 key购买 nike

我使用 switch case 语句编写了一个程序,并要求输入一个字符,但它不要求控制台窗口中的字符,而是完全跳过它

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 前面加一个空格时在第二个scanf有人在讲述一些关于空白的事情,我发现这很令人困惑

他说第二个scanf取值 \n作为一个字符,如果我在 %c 之前加一个空格在第二个scanf那不是一个字符而且不是以空格为字符吗?

但是在这个程序中它并没有采用 \n作为角色

int main() 
{
char a;
printf("\ngive a char\n");
scanf("%c",&a);
printf("%c",a);

return 0;
}

这真的很令人困惑,任何人都可以帮助我,我想知道出了什么问题。

最佳答案

每次使用这种格式的 scanf 时:

scanf("%c",&a); 

它留下一个换行符,该换行符将在下一次迭代中使用。您提到的最后一个程序只有一个“scanf”。尝试使用另一个scanf。你也会遇到同样的问题。

所以为了避免空格,你必须写:

 scanf(" %c",&opr); 

格式字符串之前的空格告诉 scanf 忽略空格。或者最好使用

getchar();

它将消耗你所有的换行符

关于c - scanf 不扫描 %c 字符而是跳过该语句,这是为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32643397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com