#include<stdio.h> int main() { char string_c[20],*c; printf("input string:\n"); scanf("%c",string_c); printf("input a char:\n"); scanf("%c",c); pritnf("%s %c",string_c,*c); return 0; }
比如上面這種情況會發生錯誤,當程序運行會發生當輸入字符串之后,不需要輸入第二次的字符,它直接出結果。其實是第一次輸入字符串之后回車,最后'\n'沒有給String_c,而是保存在緩存中,當第二次需要輸入時,直接把緩存中的字符賦值。
解決方法:
(1)將兩個scanf()函數寫為一個sancf("%s %c",striing_c,c);
(2)在第一個scanf()函數下面寫清空緩存操作:fflush(stdin)刷新標准輸入緩沖區
(3)在第一scanf()函數加入 getchar() ,將'\n'直接取出,讓它不在起作用
(4)在一個scanf()函數這么寫:scanf("%c\n",string_c)
原文鏈接:https://blog.csdn.net/PyDongJava/article/details/84572002
#include<stdio.h> int main() { char ch1,ch2; printf("Input for ch1:/n"); scanf("%c",&ch1); printf("ch1=%c/n",ch1); printf("Input for ch2:/n"); scanf("%c",&ch2); printf("ch2=%c/n",ch2); }
表面上看這段程序是沒有錯的,也可以運行,但運行過程中到第二個scanf輸入值給ch2時,程序不會停止,而是直接運行到最后一個printf !
為什么?當時百思不得其解。。。
今天上網查了下才知道,原來scanf是從標准輸入緩沖區中讀取輸入的數據,而%c的字符輸入格式會接收回車字符,在輸入第一個scanf時輸入字符后按 回車結束,輸入緩沖中保存了這個回車符,遇到第二個scanf時,它自動把這個回車符賦給了ch2。而如果第二個scanf的輸入格式不是%c時,由於格 式不匹配,這個回車符會被自動忽略,所以只有在連續輸入兩個%c的格式時才會出現這樣的問題!
解決辦法:(二辦法任選其一)
1。清空輸入緩沖區
第一個scanf后加入語句:fflush(stdin); //C語言清空輸入緩沖區函數
2。格式控制中加入空格
將第二個scanf改為:scanf(" %c",&ch2);//在%號前面加一個空格
scanf格式輸入時要求輸入格式與格式控制符中的完全一樣(如:scanf("abcd%c",&ch);輸入時必須輸入abcde,ch得到的值為e)空格可以抵消前面輸入的回車符。
原文鏈接: https://www.cnblogs.com/GoldCrop/p/11306547.html