我正在尝试用C编写一个基本的计算器程序,我几乎就在那里!我有一个问题,它涉及反复查询用户输入。
我可以通过我的循环一次,但即使用户输入了正确的字符,我的程序仍然会脱离循环。
我是C的新手,但我在Java中做了大量的编程,所以我理解了循环,条件和数据类型的功能。
#include <stdio.h>
int main()
{
char yes;
int a, b, c, choice;
yes = 'y';
while(yes == 'y' || yes == 'Y')
{
printf("Enter first integer: ");
scanf("%d", &a);
printf("Enter second integer: ");
scanf("%d", &b);
printf("\nAdd(1), Subtract(2), Multiply(3), Divide(4): ");
scanf("%d", &choice);
printf("\n");
switch(choice)
{
case(1):
c = a + b;
printf("%d + %d = %d\n", a, b, c);
break;
case(2):
c = a - b;
printf("%d - %d = %d\n", a, b, c);
break;
case(3):
c = a * b;
printf("%d * %d = %d\n", a, b, c);
break;
case(4):
c = a / (float)b;
printf("%d / %d = %d\n", a, b, c);
break;
default:
printf("Incorrect choice. Try again.\n");
}
printf("\nAgain (Y/N): ");
scanf("%c", &yes);
}
return 0;
}
答案 0 :(得分:4)
您需要使用尾随换行符,在stdin
缓冲区中输入遗骸,准备好由下一个scanf
读取。
更改
scanf("%c", &yes);
到
scanf(" %c", &yes);
答案 1 :(得分:1)
问题是在输入数字后,换行符留在输入上以选择要执行的操作。因此,当询问用户是否要再次执行此操作时,将使用换行符而不是y或n。我可能错了,因为我做了一些编程已经有一段时间了。 对我来说解决问题的方法是在行
之后添加一些代码printf("\nAgain (Y/N): ");
在printf语句之后立即添加此位将从输入中删除换行符并应该这样做。
while(getchar() != '\n')
getchar();
也许其他人可以解释为什么这有效,我不记得具体细节。这是我发现有用的一件小事,它不时出现。