c語言中的連續輸入問題

2021-06-19 11:06:49 字數 1149 閱讀 1154

(這個是我寫的,我覺得博文搬家有點麻煩,然後就複製貼上過來了。)

1.具體問題(問題的解答還有待進一步的完善)

(1) 完整**:

#include "stdio.h"

struct date

;struct student

;void main()

第二類**:

僅標黃出發生變化

scanf(

"%d\t %s",&student1.num,student1.name); //

fflush(stdin);

(2)問題描述

這只是**部分,當我們執行程式後,如果我們在程式一中進行如下的輸入

我們會看到,根本無法實現出生年月的輸入。

2.錯誤分析

我們對這樣的錯誤顯示進行如下分析

首先,我們沒有按照程式中規定的格式進行輸入。

其次,在這段程式中有連個scanf輸入,毫無疑問,第乙個程式中輸入的內容放到對應的變數中時,比然後殘留乙個enter。因為enter的存在使得第二個需要輸入三個int的那段**根本無法執行。

3,問題解決

如果,我們按照程式中規定的輸入方法完成第一次的輸入。在第二次進行scanf是不會有問題的。

而且此時的程式中並沒有fflush(stdin);這就說明了乙個問題,在原始檔的編譯過程中,

scanf("num is %d,name is %s",&student1.num,student1.name)被標色的部分編譯方式比較特殊。(特殊之處目前還不清楚)如果我們不能按照程式中指定的方式輸入的話,我們可以在第二次scanf時新增fflush(),使用該函式後,雖然能實現第二次scanf的輸入,但是第一次輸入內容的賦值情況仍然是有問題的。

4. 總結

1)我們要保證執行時的輸入和程式中指定的輸入保持一致

2)快取區中分配給程式輸入的內容有限,如果多次輸入,一定要記住使用fflush(stdin),釋放相應的記憶體,一共下一次輸入。尤其在以後出現多次字串的輸入時,這個問題將會更加明顯。

C語言 連續輸入問題(小白必看)

c語言的連續輸入有三種 1.while scanf d d a,b 其中,是按位取反,1的十六進製制補碼表示為0xffffffff,f是二進位制的1111,取反後全部變為0,於是while結束,並且只有返回值為eof 即 1 時,其取反值才為0,while迴圈才能結束。例子 第一種連續輸入 incl...

C語言裡的scanf連續輸入出錯問題

今天在看 時發現乙個有趣的東西,下面看一段 可以看到輸入輸出出現了問題,那是什麼問題呢,經過網上查閱應該是快取的問題,就是說第一次輸入account時的enter回車也被快取到了裡面,所以說清一下快取就可以解決這個問題,清理剩下的快取有三種方法,分別是利用系統自帶的fflush方法 再次讀取乙個字元...

C語言中的Scanf輸入函式

1 問題描述 c語言中的scanf函式如果讀取到正確的值,也就是和scanf函式中提前設定的值的型別一致時,該值可以正確被讀入。並且scanf函式的返回值是1,通過對scanf函式的返回值的判斷就可以知道scanf函式是否讀入了正確的值。2 程式 本次使用的編譯器是vscode,測試程式是乙個把華氏...