我使用開關case語句寫了一個程序,並要求輸入一個字符,但它不要求在控制檯窗口中的字符,但跳過它完全Scanf未掃描%c字符,但跳過了語句,爲什麼?
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
值作爲一個字符,如果我在第二scanf
加一個空格%c
之前是不是一個性格,而不是ta作爲角色的空間?
但是這個計劃不採取\n
作爲字符
int main()
{
char a;
printf("\ngive a char\n");
scanf("%c",&a);
printf("%c",a);
return 0;
}
這真是混亂可以在任何幫助我,我想了解什麼是錯的。
這可能是在插入兩個數字後輸入的'換行'字符。輸入像緩衝隊列一樣工作。它排列字符。在這種情況下,你告訴它將第一個數字讀入&a,跳過其間的任何內容,將第二個數字讀入&b,然後讀取下一個字符。自從輸入數字到&b後,即時猜測你點擊'ENTER',所以它會將'換行'讀入&opr。解決這個問題的一個快速方法是在你的scanf操作行後面添加另一行'scanf(「%c」,&opr);') – TuanDT
在第二個'scanf'的'%c'之前放置一個空格https:// stackoverflow .com/questions/13275417/why-scanfd-does-not-consume -n-while-scanfc-does – kaylum
不要使用'scanf'。http://www.c-faq.com/stdio/scanfprobs。HTML – jamesdlin