在C語言中連續使用scanf()函數出現的問題


 

#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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM