c語言scanfda輸入字元為什麼會進入死迴圈

時間 2021-12-19 13:08:28

1樓:匿名使用者

scanf("%d",&a); 應當鍵入數字,如果鍵入字母,scanf 語句執行失敗,a當中未取得輸入值,scanf函式返回0。

不一定是死迴圈,根程功編制的能有關。

有些情況,是由於輸入流裡的你鍵入的字母沒有被清掉,後面的輸入語句連續執行失敗。可以用 fflush(stdin);  清除多餘的字元。

例程:#include

int main()

2樓:文正

這個理論上是不會進入死迴圈的, 因為你只要輸入的數字是2, 它就會跳出迴圈. 但是問題是, 你的這個程式沒有清空輸入緩衝區的功能, 這樣一旦第一次輸入留下了乙個\n, 那後面的scanf就無法輸入了.

3樓:

研究過scanf函式是怎樣接收整型數字的嗎?它要跳過所有非數字的字元專接收數字。那麼輸入了字元它就一直留在輸入緩衝區;只要緩衝區有字元,scanf就要去讀,一讀不是數字,它就跳過,試圖等到輸入緩衝區沒有字元了才等待你輸入……如此反覆,當然就「死迴圈」了。

為了驗證,你在printf("you lose!!\n");後加一句getchar();,把緩衝區裡的那個非數字字元接收掉,看看還會不會是「死迴圈」?

4樓:匿名使用者

因為scanf("%d",&a),%d要求的是數字,輸入字元的話,a不會被賦值

也就是說a的值沒有改變,while迴圈的條件不變,當然會繼續執行

5樓:莊政警

你這個問題可以利用scanf函式的返回值來解決,scanf函式的返回值是個整數,它的含義是輸入和格式匹配的引數的個數,比如scanf("%d"%d",&a,&b); 如果輸入 2 3,那就會返回2,輸入2 a,返回1輸入a 3 則返回0,一旦碰到格式不匹配的輸入,就把不匹配的輸入留在緩衝區並且拒絕讀取,那麼你這個例子的scanf("%d",&a);如果格式正確匹配的話會返回1,那就利用這一點來判斷是否出現了不匹配的情況:

int b=2,a=0;

scanf("%d",&a);

while(a != b)

; //清空輸入緩衝,可能有字串輸入,所以用了迴圈} }

6樓:匿名使用者

scanf("%d",&a);

這語句只從輸入緩衝區接收數字,輸入字元時就不會接收,輸入的字元永遠在緩衝區內。

a沒有接收值所以a的值為初值0。

所以a != b為真,進入while迴圈。

而while裡面的scanf("%d",&a);語句一樣會從緩衝區接收數字,但緩衝區還是前面輸入的字元,所以還是接收不到。

所以a != b恆成立。

所以就會死迴圈。

7樓:匿名使用者

因為你要讀取的是數字,輸入乙個字元時, scanf函式會失敗,但是這個字元還在流裡面沒有被讀出來,所以就死迴圈動不了了

8樓:雪南江

不像是死迴圈的樣子啊,你輸入2不就是退出了嗎?

c語言中 scanf(「%d」,a)和scanf(「%d」,&a)有什麼不同

9樓:匿名使用者

scanf函式要求第二個引數是乙個指標型別的變數

scanf("%d",a)----->表示a的定義為: int* a;

scanf("%d",&a)---->表示a的定義為: int a;

10樓:匿名使用者

前面的不正確,得不到命令列輸入

後面的可以。。。。。。

因為函式要根據位址才能返回。。。。。。。。。。。

11樓:

後面的符合可以獲取位址 得到你要輸入的數字或字元 否則就是錯誤 無法執行

12樓:親愛滴小雷

帶符號的那個正確!

是用來獲取產量的位址的?

c語言中scanf("%d",a)和scanf(%d",&a)在printf("%d",a)中到底有什麼區別

13樓:掃帚

那兩個回答對scanf的解說也太迷了,scanf後半部分寫的應該是乙個指標(位址)

如果a是乙個int變數,a = 1,儲存在記憶體的1234 5678h處,scanf(%d",&a)是正確寫法,表示將輸入讀到變數a所在的位址處,即記憶體的1234 5678h處

而在執行時scanf("%d",a)會發生錯誤,因為將輸入讀到了記憶體的0000 0001h處

14樓:隨偉春芳歇

scanf(%d",&a) 就是讀取整型變數a在記憶體中的位址 。

scanf("%d",a)就是讀取整型變數a的值。

printf("%d",a) 就是輸出整型a的值。

在c語言中,&是取位址運算子,&a表示獲取a在記憶體中的位址。%d 格式化輸出整數。scanf() 函式用於從標準輸入(鍵盤)讀取並格式化, printf() 函式傳送格式化輸出到標準輸出(螢幕)。

在c語言中,%f表示 格式化輸出浮點型資料。

例如:#include

int main()

15樓:我是不是師兄

&是取位址的意思 &a 是取出變數a的位址scanf(%d",&a) 就是讀取1個數字 寫入a的位址scanf("%d",a) 是讀取1個數字 寫入位址a 這個a如果是100 就寫到位址100 如果是200 就寫到位址200 顯然 這很危險 萬一a的儲存的值剛剛好是一些指令的位址什麼的 會寫到這個位址修改指令 就執行不下去了 出大錯

printf("%d",a) 就沒什麼了 把變數a的儲存的值輸出然後 &是取位址 所以你可以

printf("%d",&a) 這樣是輸出a的位址

16樓:燒餅頭

scanf是輸入,要在變數前加上&。printf是輸出,不用加&

c語言 scanf("%d",&a) 和 printf("%d",&a) 有什麼不同 它們各自的含義是什麼?

17樓:匿名使用者

scanf("%d",&a),是輸入乙個整形數值給變數a,

printf("%d",&a),是列印a的位址。

如果去掉&,變成printf("%d",a),就是列印整形變數a的值了。輸出時一般是不加&的

18樓:匿名使用者

scanf(「%d」,&a)是輸入乙個整形變數;

printf(「%d」,&a)是輸出這個整型變數的位址。

19樓:聽海的聲音

printf不要取位址符&

20樓:匿名使用者

80445766

回答正確

c語言中scanf("%d%*s%d",&a,&b);是什麼意思

21樓:假面

%d 讀入十進位制整數

%s 讀入乙個字串,遇空格、製表符或換行符結束。

* 表示本輸入項在讀入後不賦值給相應的變數。

在有一些實現中,printf函式與scanf函式在使用時可以不使用預編譯命令#include 。

函式的第乙個引數是格式字串,它指定了輸入的格式,並按照格式說明符解析輸入對應位置的資訊並儲存於可變引數列表中對應的指標所指位置。

22樓:

對於scanf中的 %*(如%*s %*d) 表示跳過這個字段(假如存在)。相對前面括號中的,則是跳過乙個單詞 跳過乙個整形數

那麼,scanf("%d%*s%d",&a,&b);就是說:

讀取乙個整型數,放到a裡;忽略中間輸入的任何串(假如存在);讀取另乙個整型數,放到b裡。

23樓:

*是指向a的指標。&是a的記憶體位址。"%*s"根據以上推測,應該指向a的記憶體位址的指標。

c語言輸入時,scanf("%d",&a); 中 「&」 是什麼意思?

24樓:

這裡的話涉及到後面的指標,這個&有兩種意思,乙個是引用,乙個是取位址,在這裡的話是傳址引用,就是找到計算機為a分配的記憶體空間,並賦值,就是你輸入的數字,有什麼不懂的可以繼續問

25樓:

取位址操作符,讓 scanf 將取到的值 賦值到 a的記憶體中

26樓:c餘姚

求位址符,相當於確定a的位置的符號

27樓:鐳毅

取指,即取得a的位址。

scanf要求,其後的變數為指標型別。

你這裡一定定義了int a;

如果直接定義的是指標,就不用加&

用c語言輸入字元判斷大小寫,用C語言輸入字元判斷大小寫

小夏在深圳 c語言輸入字元判斷大小寫的源 如下 include int main char c printf 輸入一個字元 scanf c c if c a c z c a c z printf c 是大寫 c else printf c 不是小寫 c return 0 擴充套件資料 1 輸入的字元...

c語言怎麼分別輸入字元型變數,C語言 怎麼分別輸入字元型變數

刺友互 1 開啟編譯器,現在演示的是c free。2 ctrl n新建乙個檔案。3 運用scanf語句輸入程式 include int main 4 按f9進行編譯。5 按f5執行程式。6 輸入變數是什麼輸出變數就是什麼,體驗scanf語句運用格式。 輸入單個字元變數的方法有 getchar sca...

c語言 字串,輸入字元,編寫函式dstr將輸入的字元從字串中刪去。要求能調通

給你個參考參考,寫的很不錯的,不過不是我寫的啦 include char dstr char s,char c int main char str 1000 char ch printf 請輸入乙個字串 t gets str printf 請輸入要挖去的字元 t scanf c ch printf ...