第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么scanf()會(huì)在這段代碼中導(dǎo)致無限循環(huán)?

為什么scanf()會(huì)在這段代碼中導(dǎo)致無限循環(huán)?

C++ C
茅侃侃 2019-06-06 14:39:29
為什么scanf()會(huì)在這段代碼中導(dǎo)致無限循環(huán)?我有一個(gè)小的C-程序,它只讀取stdin的數(shù)字,每個(gè)循環(huán)一個(gè)。如果用戶輸入了NaN,則應(yīng)該將一個(gè)錯(cuò)誤打印到控制臺(tái),并且輸入提示符應(yīng)該再次返回。在輸入“0”時(shí),循環(huán)應(yīng)該結(jié)束,給定的正/負(fù)值的數(shù)目應(yīng)該打印到控制臺(tái)。下面是節(jié)目:#include <stdio.h>int main(){     int number, p = 0, n = 0;     while (1) {         printf("-> ");         if (scanf("%d", &number) == 0) {             printf("Err...\n");             continue;         }         if (number > 0) p++;         else if (number < 0) n++;         else break; /* 0 given */     }     printf("Read %d positive and %d negative numbers\n", p, n);     return 0;}我的問題是,當(dāng)輸入某個(gè)非數(shù)字(如“a”)時(shí),這將導(dǎo)致無限循環(huán)寫入“->err.”再三。我猜這是一個(gè)scanf()問題,我知道這個(gè)函數(shù)可以用一個(gè)更安全的函數(shù)來代替,但是這個(gè)例子是針對(duì)初學(xué)者的,只知道printf/scanf、if-ell和循環(huán)。我已經(jīng)讀過答案了這個(gè)問題并略過其他問題,但沒有真正回答這個(gè)具體的問題。
查看完整描述

3 回答

?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊

scanf只使用與格式字符串匹配的輸入,返回所使用的字符數(shù)。任何不匹配格式字符串的字符都會(huì)導(dǎo)致其停止掃描,并將無效字符留在緩沖區(qū)中。正如其他人所說,在繼續(xù)之前,仍然需要從緩沖區(qū)中清除無效字符。這是一個(gè)非常臟的修復(fù),但它將從輸出中刪除違規(guī)字符。

char c = '0';if (scanf("%d", &number) == 0) {
  printf("Err. . .\n");
  do {
    c = getchar();
  }
  while (!isdigit(c));
  ungetc(c, stdin);
  //consume non-numeric chars from buffer}

編輯:修正了一次刪除所有非數(shù)字字符的代碼.不再為每個(gè)非數(shù)字字符打印多個(gè)“錯(cuò)誤”。

這里是掃描的一個(gè)很好的概述。


查看完整回答
反對(duì) 回復(fù) 2019-06-06
?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

scanf()離開“a“下一次仍在輸入緩沖區(qū)中。getline()無論如何讀取一行,然后用strtol()或者類似的。

(是的,getline()是GNU特有的,不是POSIX。那又怎么樣?問題是“GCC”和“Linux”。getline()也是閱讀一行文本的唯一明智選擇,除非您想手動(dòng)完成所有操作。)


查看完整回答
反對(duì) 回復(fù) 2019-06-06
  • 3 回答
  • 0 關(guān)注
  • 980 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)