c語言int陣列變數,通過scanf迴圈賦值,輸入3 5,自動執行,所有數值為3,請問為什麼?

時間 2021-05-09 16:36:45

1樓:悽臨雨

目前除了本答案,其他兩個答案全有錯

關鍵在於%d不接受【.】,遇到.後scanf直接返回0表示讀取失敗,且【.】留在輸入緩衝區中,下一次迴圈繼續出錯。

如何處理?

1.用double變數 %lf 給scanf。

2.保證你的輸入正確,因此程式無需修改

3.先讀取一整行【字串】,再從一行裡進一步讀取。

#include

intmain

(void);

// 吃掉非0~9,有可能讀取不成功返回0,但是無所謂scanf

("%*[^0-9]"

);// 讀取0~9開頭直到空格換行之前,到字串裡。順便吃掉乙個換行符

intret1

=scanf

("%[^

\n]%*c"

,buff

);int

ret2

=sscanf

(buff

,"%d",&

B[i]);

// 從已讀取行buff中讀入整數if(

ret2!=1

)// 讀取失敗

printf

("讀入行【%s】\n"

,buff

);printf

("讀入整數【%d】\n"

,B[i

]);}

/*輸入第1個元素的值=

4.56

讀入行【4.56】

讀入整數

輸入第2個元素的值=

4 556

讀入行讀入整數

輸入第3個元素的值=

讀入行讀入整數

*/return0;}

2樓:乙隻羊

因為scanf不接收空格和回車所以當你第一次迴圈scanf時,輸入3.5並回車時,回車會留在輸入緩衝區,

第二、第三次迴圈執行scanf時,輸入緩衝區以及有乙個回車了,scanf這時會直接讀取到回車,會讀取失敗直接結束,這時賦值給陣列變數B的變數val還是上一次的資料。

又因為你的陣列變數B是整型變數,小數部分會被丟棄,所以最終所有數值都為3。

解決辦法:

在scanf後面加一句 while((c = getchar()) != '\n' && c != EOF); 吸收掉回車即可。

3樓:機械夯客

如果輸入整數,會要求輸入3次。但輸入小數3.5後,開始自動執行,截圖為自動執行結果。

個人理解,輸入3.5,按照順序,第一次讀取3,第二次讀取.5,由於是int型別,取整為0,第三次應該要求再次輸入,但執行結果奇怪,全部自動執行,且所有值為3

請教乙個C語言指標陣列問題?

郭建波 陣列指標 也稱行指標 定義 int p 10 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是10,也可以說是p的步長。也就是說執行p 1時,p要跨過10個整型資料的長度。例 int p 4 該語句是定義乙個陣列指標,指向含4個元素的一維陣列。所以陣列指標也稱指...

C語言5x5陣列亂碼怎麼解決?

for r 0 r N r 在一行裡輸入一大串,其實先讀進緩衝區了,然後scanf s再去一點點取出來 如果想忽略多輸入的東西,清一下緩衝應該可以。 微塵 include standard input output functions define N 5 int main void printf ...

C語言二維陣列的名稱的困惑?

暮無井見鈴 講無型別的位址本身儲存什麼值沒有意義。位址是什麼型別指標的值 要求合法且非 NULL 該位址 就儲存這個型別的物件。注意具體程式中能合法讀取某個位址的指標型別是較為有限的。arr 是 int 10 10 型別陣列物件,可以隱式轉換成 int 10 型別指標值。該指標值指向陣列首元素。取 ...