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

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

Scanf在C中每隔一個(gè)時(shí)間循環(huán)跳過一次。

Scanf在C中每隔一個(gè)時(shí)間循環(huán)跳過一次。

C
守著一只汪 2019-06-17 16:25:08
Scanf在C中每隔一個(gè)時(shí)間循環(huán)跳過一次。我正在嘗試開發(fā)一個(gè)簡單的基于文本的掛人游戲,主游戲循環(huán)從提示開始,在每個(gè)字母上輸入一個(gè)猜測,然后繼續(xù)檢查字母是否在單詞中,如果不是,就會(huì)停止使用。然而,當(dāng)我運(yùn)行這個(gè)游戲時(shí),每次都會(huì)出現(xiàn)兩次提示,程序不會(huì)等待用戶的輸入。它也會(huì)帶走生命(一次生命如果它是正確的輸入,兩次生命如果不是),所以它所接受的不是以前的輸入。這是我的游戲循環(huán),簡化了一點(diǎn):while (!finished){     printf("Guess the word '%s'\n",covered);     scanf("%c", &currentGuess);     i=0;     while (i<=wordLength)     {         if (i == wordLength)         {             --numLives;             printf("Number of lives: %i\n", numLives);             break;         } else if (currentGuess == secretWord[i]) {             covered[i] = secretWord[i];             secretWord[i] = '*';             break;         }         ++i;     }     j=0;     while (j<=wordLength)     {         if (j == (wordLength)) {             finished = 1;             printf("Congratulations! You guessed the word!\n");             break;         } else {             if (covered[j] == '-') {                 break;             }         }         ++j;         if (numLives == 0) {             finished = 1;         }     }}我想問題是,如果它還沒有接收到什么東西的話,它就會(huì)被吸收,但是我不知道為什么。有人知道嗎?我在MacOSX10.5上使用GCC 4.0.1。
查看完整描述

3 回答

?
猛跑小豬

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

紐琳。

第一次遍歷循環(huán)時(shí),snf()讀取字符。然后它讀換行符。然后它讀取下一個(gè)字符;重復(fù)。

怎么修?

我很少使用scanf(),但是如果使用格式字符串"%.1s",它應(yīng)該跳過空白(包括換行符),然后讀取非空白字符。但是,它需要的是一個(gè)字符數(shù)組,而不是一個(gè)字符:

char ibuff[2];while ((scanf("%.1s", ibuff) == 1){
    ...}


查看完整回答
反對(duì) 回復(fù) 2019-06-17
?
慕蓋茨4494581

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

將問題分解成更小的部分:

int main(void) {
    char val;
    while (1) {
        printf("enter val: ");
        scanf("%c", &val);
        printf("got: %d\n", val);
    }}

這里的輸出是:

enter val: g
got: 103enter val: got: 10

為什么scanf再給你一個(gè)“10”?

由于我們打印了ASCII值的ASCII編號(hào),ASCII中的‘10’是“Enter”所以scanf還必須抓取“Enter”鍵作為字符。

當(dāng)然,看著你scanf字符串,您每次在循環(huán)中都請(qǐng)求一個(gè)字符??刂谱址脖徽J(rèn)為是字符,并將被拾取。例如,您可以在上面的循環(huán)中按下“ESC”然后“Enter”,然后獲取:

enter val: ^[got: 27enter val: got: 10


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

添加回答

舉報(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)