好的,我正在构建一个程序,它询问用户半金字塔应该有多高,然后用户输入一个1-24的整数(如果他们输入超出此范围的整数,我有一个while循环) )。
然后程序继续构建半金字塔。我的问题是,如果用户输入一个字符或字符串,基本上任何不是数字的程序都会崩溃,我已经搜索了所有但仍无法找到适用于我的情况的解决方案。
这是我的代码:
#include <stdio.h>
main()
{
int height; //user inputs this
int counter;
int line;
do
{
printf("What height should the half pyramid be?\n");
scanf("%d", &height);
printf("You typed in %d\n", height);
if(height > 23 || height<1)
{
printf("The half pyramid must be no bigger than 23 and higher than 0 buddy\n");
}
}
while(height >23 || height<1);
for(line = 1; line <= height; line++)
{
int spaceNum = height - line;
int spaceCounter;
for (spaceCounter = 0; spaceCounter <= spaceNum ; spaceCounter++)
printf(" ");
for(counter = 0; counter < line ; counter++)
printf("#");
printf("\n");
}
return 0;
}
答案 0 :(得分:1)
读入一个字符串并使用sscanf解析字符串。检查sscanf返回值,确认从中成功读取了多少个字段。
答案 1 :(得分:1)
为什么不检查scanf
的返回值。
应该返回1.如果不是,它还没有读取整数。所以你需要吃一些缓冲剂。即一条到新线的字符串然后扔掉再问一遍
答案 2 :(得分:0)
您应该将输入的输入传递给strtol
函数,该函数将输入作为长整数返回。如果输入不是有效数字,则返回0
。如果该值超出范围,则函数返回LONG_MAX
或LONG_MIN
(在limits.h
中定义),并且errno设置为ERANGE
。
执行条件测试,以便程序显示无效输入&#39;如果收到0
,则会再次询问该号码。
答案 3 :(得分:0)
而不是scanf()
,使用fgets()
和sscanf()
或strtol()
// scanf("%d", &height);
char buf[40];
fgets(buf, sizeof buf, stdin);
if (sscanf(buf, "%d", &height) != 1) Handle_InputError();