所以我测试了一些东西,我注意到如果用户输入为Y / y,则使用以下代码它将不会出现循环(我再次调用getchar()来摆脱\ n在队列中,以便它可以为用户的下一个输入做好准备):
#include <stdio.h>
#include <stdbool.h>
int main(int argc, char* argv[]) {
for(int i = 0; i < argc; i++)
printf("argv[%d] = %s\n", i, argv[i]);
char name[20];
printf("What's your name ? ");
gets(name);
char lastname[20];
printf("%s what's your last name ? ", name);
fgets(lastname, 20, stdin);
int age;
printf("%s %s what's your age? ", name, lastname);
scanf("%d", &age);
bool exit = false;
char c;
while (!exit) {
printf("Do you wish to exit the program ? (Y/N) ");
c = getchar();
getchar();
if (c == 'Y' || c == 'y')
exit = true;
}
printf("Have a nice day %s %s.\n", name, lastname);
return 0;
}
有人可以告诉我这是什么问题吗?
答案 0 :(得分:0)
当您进入循环时,输入流中已存在换行符。这会导致您的第一个getchar
返回\n
。第二个getchar
读取Y
。要解决此问题,您需要在进入循环之前进行getchar
调用。