亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

while循環中scanf的返回值

while循環中scanf的返回值

C
慕用4063026 2017-10-28 21:47:11
while(scanf("%d",&n[i])!=1)解釋一下這里!=1和==1的區別以下源碼:#include <stdio.h>int main(void) {?? ? int n[8];? ?? printf("Enter the integer:\n"); for(size_t i=0;i<8;i++) while(scanf("%d",&n[i])!=1){ ? ?printf("continu\n"); } for(size_t i=8;i>=1;i--) printf("%d",n[i-1]); getchar(); getchar(); return 0;}
查看完整描述

2 回答

已采納
?
onemoo

TA貢獻883條經驗 獲得超454個贊

“==1 的話不是讀取成功一個值繼續嗎”——那么你的意圖是“繼續”什么呢?

scanf 返回 1 確實表示成功讀取這個值。== 1 的判斷結果為 true,這會進入執行 while 循環體,可這個循環體只是打印出一句話,然后又繼續執行 while 判斷部分的 scanf——你還是在這個 while 循環中沒出去!? ?所以如果你輸入正確,那你根本沒法“繼續”,而是被困在了 while 循環中。

而且,你這樣判斷“讀取成功”的行為沒有意義啊!? 如果成功讀取那就執行后面的語句唄,為何要判斷呢??


如果是判斷“讀取失敗”的話還有點用。如果讀取失敗,就提示你再次輸入正確的值。這一般可以用循環來處理,比如 while (scanf讀取,判斷是否失敗) {讀取失敗,提示你再次輸入}。


但是代碼中 while(scanf("%d",&n[i])!=1) {printf("continu\n");} 這個方法并不能達到目的!

如果 scanf 匹配“輸入流”中的內容失敗,那么輸入流中錯誤的內容還會留在輸入流中!?

那么一旦 scanf 匹配失敗,scanf 返回 0,則滿足 while 循環條件,while 的循環體打印出一句"continu"后開始下一次循環,即再次執行 while 的判斷部分。由于輸入流中的錯誤內容還在,scanf 仍然會讀到這些錯誤內容,仍然會匹配失敗......這會導致 while 死循環!


查看完整回答
反對 回復 2017-10-29
  • 慕用4063026
    慕用4063026
    改成continue;呢?語句循環順序能說一下嗎,麻煩了
  • onemoo
    onemoo
    continue語句就是直接執行下一次循環。本來題目中代碼的這個循環體中就沒做什么事,就算什么都不寫也是執行下一次循環。所以改成continue語句也是完全一樣。
?
慕用4063026

TA貢獻195條經驗 獲得超115個贊

==1 的話不是讀取成功一個值繼續嗎 ,可是==1的話代碼就讀不出倒序

查看完整回答
反對 回復 2017-10-28
  • 2 回答
  • 0 關注
  • 2337 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號