gpt4 book ai didi

c - C 中 do-while 循环内的 switch 语句

转载 作者:行者123 更新时间:2023-11-30 16:14:45 25 4
gpt4 key购买 nike

我正在尝试制作一个程序,告诉您某个字母是否是元音或辅音,然后询问用户是否想再次使用该程序。

仅使用 switch 语句就可以完全正常工作。我的问题是在插入 do-while 循环时出现的。第一次尝试时,程序运行顺利,但在第二次及后续循环中,在询问用户是否要通过键入 1 再次尝试后,程序“跳转”到用户写入输入的部分 (scanf("% c", &letter)) 并执行程序的其余部分,考虑之前键入的 1 作为输入并搞乱一切。

我尝试过寻找类似问题和视频的答案,但我很新,我就是无法理解。我有另一个程序也有类似的问题。我将非常感谢您的帮助:)

int main()
{
char letter;
int new_try;
do {
printf("Is you letter a vocal or a consonant?\n");
printf ("\nPlease submit a letter:\n");
scanf("%c", &letter);

switch(letter) {
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
printf("This letter is a vowel\n");
break;
default : printf("This letter is a consonant\n");
break;
}

printf("Do you wish to try again?\n [1.Yes 2. No]\n");
scanf("%d", &new_try);
}
while(new_try != 2);
return 0;
}

最佳答案

您需要清理输入缓冲区。否则,只要输入缓冲区中有字符,程序就不会等待用户的新输入。这是解决方案。

#include <stdio.h>
int main() {

char letter;
int new_try;
do{

printf("Is you letter a vocal or a consonant?\n");
printf ("\nPlease submit a letter:\n");
scanf("%c", &letter);
while ((getchar()) != '\n');

switch(letter) {

case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U': printf("This letter is a vowel\n");
break;
default : printf("This letter is a consonant\n");
break;
}

printf("Do you wish to try again?\n [1.Yes 2. No]\n");
scanf("%d", &new_try);
}while(new_try != 2);


return 0;
}

更新

正如 @David C. Rankin 提到的,使用 scanf("%c", &letter); 也可以解决您的问题。但是,它并没有解决匹配失败的问题。在上述情况下,您还需要验证输入。

关于c - C 中 do-while 循环内的 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57438247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com