虽然循环正在跳过用户输入,但我做错了什么?

时间:2015-11-26 22:11:58

标签: c loops while-loop

所以我正在尝试制作一个简单的计算器,让用户可以在不退出的情况下再次使用该程序。现在循环本身工作正常,但是当我使用printf()时,它会再次重复它并跳过它:

Enter an operator: +

Do you want to continue?(Y/N): y

Enter an operator: 
Do you want to continue?(Y/N): 

以下是代码:

int main()
{
    char o, ans = 'Y';
    int num1, num2;

    while(ans == 'Y' || ans == 'y')
    {
        printf("\nEnter an operator: ");
        scanf("%c", &o);

        printf("\nDo you want to continue?(Y/N): ");
        scanf(" %c", &ans);
    }

    return 0;
}

2 个答案:

答案 0 :(得分:0)

我不确定问题是什么,但你可能根本没有在秒scanf上读取字符。您应该检查scanf的返回值,因为它会告诉您已读取了多少参数。可以使用调试器完成调试,也可以在某些点打印变量。这是最好的学习方式;)

答案 1 :(得分:0)

当你按回车键时,你给你的程序提供了字符'\ n',第二次你的scanf必须读取'\ n'(换行符)。此外,当您只想读取单个字符以使用getchar()时,这是一个好主意。 尝试像这样修改你的代码

while(ans == 'Y' || ans == 'y')
{
    printf("\nEnter an operator: ");
    o = getchar();
    getchar();     // because of '\n'

    printf("\nDo you want to continue?(Y/N): ");
    ans = getchar();
    getchar();    // because of '\n'
}