Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 避免我的应用程序以字符形式读取报税表_C - Fatal编程技术网

C 避免我的应用程序以字符形式读取报税表

C 避免我的应用程序以字符形式读取报税表,c,C,我的控制台应用程序中有以下循环: do{ printf("\n %sVotre choix :%s ",GREEN_BOLD,RESETCOLOR); choix = tolower(getchar()); }while((choix != 'c') && (choix != 'l') && (choix != 'e') && (choix != 's')); 因此,当用户键入的字符不是c、l、e或s中的一个时,他将再次收到消息V

我的控制台应用程序中有以下循环:

do{
    printf("\n %sVotre choix :%s ",GREEN_BOLD,RESETCOLOR);
    choix = tolower(getchar());
}while((choix != 'c') && (choix != 'l') && (choix != 'e') && (choix != 's'));
因此,当用户键入的字符不是
c
l
e
s
中的一个时,他将再次收到消息
Votre choix:
,程序等待他输入其他字符,但问题是用户收到该消息两次,我认为这是因为当用户键入一些字符,然后点击
Return
,在下一次迭代中,
Return
将被读取为字符,这是我得到的屏幕截图:

如何阻止应用程序将
返回
作为字符读取?

使用
%c
首先使用前面的空白,包括“返回”,然后读取1
字符

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'));