我想编写一个程序,从用户那里获取输入并计算三角形数字。还应该有一个选项来询问用户是否要采取其他输入或退出,并且需要使用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;
}
以上代码仅在退出后执行一次。如何根据我给出的输入再次运行循环?提前谢谢。
答案 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