循环跳过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循环实际上并没有检查你想要设置的条件。