1

我的控制台应用程序中有这个循环:

do{
    printf("\n %sVotre choix :%s ",GREEN_BOLD,RESETCOLOR);
    choix = tolower(getchar());
}while((choix != 'c') && (choix != 'l') && (choix != 'e') && (choix != 's'));

因此,当用户键入一个不是 , , 或 的字符时cle会再次s收到消息Votre choix : ,程序会等待他输入其他字符,但问题是用户两次收到该消息,我认为是因为当用户输入一些字符然后他敲击Return时,在下一次迭代中Return它将被读取为一个字符,这是我得到的截图:

另一个截图

如何阻止我的应用程序读取Return作为字符?

4

1 回答 1

0

用于" %c"首先使用先前的空格,包括“返回”,然后读取 1 char

char choix = 0;
do {
  printf("\n %sVotre choix :%s ",GREEN_BOLD,RESETCOLOR);
  // choix = tolower(getchar());
  scanf(" %c", &choix);
  choix = tolower(choix);
} while((choix != 'c') && (choix != 'l') && (choix != 'e') && (choix != 's'));

更好的方法,使用fgets() sscanf()团队。

char choix;
do {
  printf("\n %sVotre choix :%s ",GREEN_BOLD,RESETCOLOR);
  char buf[10];
  if (fgets(buf, sizeof buf, stdin) == NULL) break; // EOF or I/O error
  if (sscanf(buf, " %c", &choix) != 1) continue;
  choix = tolower(choix);
} while((choix != 'c') && (choix != 'l') && (choix != 'e') && (choix != 's'));
于 2013-10-23T18:55:39.137 回答