簡體   English   中英

簡單的while循環

[英]Simple while-loop

我的代碼:

#include <stdio.h>
int main(void){
char input;
  while(1){
      printf("Repeat? [Y/N] ");
      scanf("%c", &input);
      if(input=='N' || input=='n'){
          break;
      }
  }
  return 0;
}

預期產量:

Repeat? [Y/N] y

Repeat? [Y/N] y

Repeat? [Y/N] n  //Program terminated

輸出:

Repeat? [Y/N] Repeat? [Y/N] y

Repeat? [Y/N] Repeat? [Y/N] y

Repeat? [Y/N] Repeat? [Y/N] n //Program terminated

scanf正在讀取輸入緩沖區中的\\n字符(按Enter鍵)。 只需將您的scanf替換為

scanf(" %c", &input);  
//     ^A space before %c can skip any number of white-spaces

更改

scanf("%c", &input);

scanf(" %c", &input); //Note the space before %c

當程序提示您輸入字符時,您輸入字符並按Enter鍵( \\n )。 scanf讀取您輸入的字符,並將換行符( \\n )留在輸入流( stdin )中。 結果,下次調用scanf ,它會看到stdin存在\\n ,因為它也是一個字符,所以scanf會使用它,因此,它不等待輸入。

%c之前的空格指示scanf在讀取字符之前跳過所有空格,例如換行符和空格。

Enter y / n后按Enter時,您還將Enter一個Enter字符。 因此,您會Repeat? [Y/N] Repeat? [Y/N] Repeat? [Y/N] Repeat? [Y/N]

如果您僅可以添加一行getchar();那么您的代碼就不錯了getchar(); 喜歡 :::

int main(void){
char input;
  while(1){
      printf("Repeat? [Y/N] ");
      scanf("%c", &input);
      if(input=='N' || input=='n'){
          break;
      }
      getchar(); // for taking enter
  }
  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM