循环跳过scanf它的条件。
我不明白为什么While循环只是加速并跳过scanf的char? 它甚至不会要求我的输入,只是循环就像没有明天一样。
#include int main() { int number; int multiply, ans; char choice; printf("-------------------------------------"); printf("\n MULTIPLICATION TABLE "); printf("\n-------------------------------------"); do { printf("\nEnter an integer number:"); scanf("%d", &number); printf("\nMultiplication of %d is :-\n", number); printf("\n"); for(multiply=1; multiply<11; multiply++){ ans = number * multiply; printf(" %d", ans); } printf("\n"); printf("\nWould you like to continue? [Y] for Yes,[N] for no : "); scanf("%c", &choice); printf("\n"); } while(choice='Y'); printf("Thank You"); return 0;
}
scanf()
不会按照您的想法执行操作(换行符,缓冲等)。 最好使用fgetc()
:
choice = fgetc(stdin);
出于同样的原因,你需要摆脱那个尾随的换行符
scanf("%d", &number");
留在标准输入缓冲区中。 要解决此问题,请插入
fgetc(stdin);
在特别调用scanf()
。
另外,C不是Pascal。 您正在寻找的等式比较运算符和条件是
while (choice == 'Y')
单个等式标记表示赋值。
我认为你需要使用==
运算符进行比较, while
条件检查为:
while(choice=='Y');
目前您正在使用=
运算符,它将Y
分配给choice
变量。
我用这种语言编程已经很长时间了,但是一眼就看出来了:
while(choice='Y');
代替:
while(choice=='Y');
==比较,=设置等于。 所以while循环实际上并没有检查你想要设置的条件。