1

我不明白为什么 While 循环会加快速度并跳过 char 的 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;

}

4

3 回答 3

3

scanf()不做你认为的事情(换行符、缓冲等)。最好使用fgetc()

choice = fgetc(stdin);

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

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

留在标准输入缓冲区中。要解决此问题,请插入

fgetc(stdin);

在那个特定的调用之后scanf().

此外,C 不是帕斯卡。相等比较运算符 - 和条件 - 您正在寻找的是

while (choice == 'Y')

单个等式标记表示分配。

于 2012-12-23T07:23:37.360 回答
2

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

   while(choice=='Y');

目前您正在使用分配给变量的=运算符。Ychoice

于 2012-12-23T07:23:08.073 回答
2

我已经很久没有用那种语言编程了,但乍一看,你有:

while(choice='Y');

代替:

while(choice=='Y');

== 比较,= 设置等于。因此,while 循环实际上并没有检查您要设置的条件。

于 2012-12-23T07:26:37.853 回答