循环跳过scanf它的条件。

时间:2012-12-23 07:21:25

标签: c loops while-loop char

我看不出为什么While循环只是速度消失并跳过scanf的char? 它甚至不会要求我的输入,只是循环就像没有明天一样。

#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 个答案:

答案 0 :(得分:3)

scanf()没有按照你的想法做到(换行符,缓冲等)。最好使用fgetc()

choice = fgetc(stdin);

出于同样的原因,你需要摆脱

的尾随换行符
scanf("%d", &number");

离开标准输入缓冲区。要解决此问题,请插入

fgetc(stdin);

之后的scanf()

另外,C不是Pascal。等待比较运算符 - 以及您正在寻找的条件是

while (choice == 'Y')

单个等式标记表示分配。

答案 1 :(得分:2)

我认为您需要使用==运算符进行while条件检查中的比较:

   while(choice=='Y');

目前您正在使用=运算符,该运算符将Y分配给choice变量。

答案 2 :(得分:2)

自从我用这种语言编程以来已经很长时间了,但是一眼就看出来了:

while(choice='Y');

而不是:

while(choice=='Y');

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