用户在c ++中启动循环

时间:2014-10-06 13:56:29

标签: c++ visual-studio-2013

我想编写一个程序,从用户那里获取输入并计算三角形数字。还应该有一个选项来询问用户是否要采取其他输入或退出,并且需要使用while或do ... while。我编写了以下代码,但没有按预期执行:

#include <stdio.h>
int main(void)
{
    int n, number, triangularNumber;
    char s = 'Y';
    while (s == 'Y') {
        printf("What triangular number do you want? ");
        scanf("%i", &number);
        triangularNumber = 0;
        for (n = 1; n <= number; ++n)
            triangularNumber += n;
        printf("Triangular number %i is %i\n\n", number, triangularNumber);
        printf("Do you want to continue?\n");
        scanf("%c", &s);
    }
    return 0;
}

以上代码仅在退出后执行一次。如何根据我给出的输入再次运行循环?提前谢谢。

2 个答案:

答案 0 :(得分:2)

scanf("%i",&number);生成由scanf("%c",&s);生成的换行符 重写为scanf(" %c",&s)(包含%c之前的空格)以在输入之前忽略所有空格。

答案 1 :(得分:1)

两个问题:首先,小写和大写字母'y' != 'Y'之间存在差异。

第二个问题,以及你在这里看到的是第一个scanf,你在那里读取数字,它将换行符留在输入缓冲区中。然后第二个scanf调用读取该换行符并将其写入变量s

通过使用toupper确保变量s的内容是大写字母,可以轻松解决第一个问题:

while (toupper(s) == 'Y') { ... }

第二个问题可以通过在获取字符时要求scanf读取并丢弃前导空格来轻松修复,只需在格式代码之前添加一个空格即可:

scanf(" %c", &s);
//     ^
//     |
// Note space here