2012-12-23 283 views
1

我不明白为什么While循环只是加速并跳过char的scanf? 它甚至不会要求我的意见,只是像没有明天一样循环。while循环跳过scanf的条件。

#include <stdio.h> 


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; 

}

回答

3

scanf()不符合您的想法(换行符,缓冲等)。它最好使用fgetc()

choice = fgetc(stdin); 

出于同样的原因,你需要摆脱尾随的换行符的是

scanf("%d", &number"); 

叶子在标准输入缓冲区。要解决此问题,请在之后特别呼叫

fgetc(stdin); 

此外,C不是帕斯卡。等号比较运算符 - 和条件 - 您要查找的是

while (choice == 'Y') 

单等式标记表示赋值。

+0

@DCoder修复并不能解决有关'scanf()'的错误假设。 – 2012-12-23 07:25:26

+0

改变它,但仍然跳过输入部分。 –

+0

@ user1924648你在使用什么样的疯狂输入数据?尝试在'scanf(“%d”,&number)后插入另一个调用'fgetc()';'? – 2012-12-23 07:28:00

2

我认为你需要使用==运营商的对比中while条件检查:

while(choice=='Y'); 

目前使用的是=运营商,这是指派Ychoice变量。

+0

我已经修复了这部分,但它仍然不会等待我输入。 –

+0

@ user1924648真的,使用'fgetc()'。 – 2012-12-23 07:26:06

+0

使用fgetc(),现在它不用等待我输入任何东西就会退出循环。 它现在正在工作,我得到int后插入了一个额外的fgetc。 –

2

它已经很长一段时间,因为我在这语言编程,而且一目了然,您有:代替

while(choice='Y'); 

while(choice=='Y'); 

==比较,=设置等于。所以while循环实际上不检查你想设置的条件。

+0

“我已经修复了这部分,但它仍然不会等待我输入。 - user1924648 1分钟前” – 2012-12-23 07:26:58