:(正确处理0的高度\预期退出代码为0,不输出“\ n请输入正整数值...”
:(拒绝“\”预期输出的非数字高度,而不是输入提示
https://sandbox.cs50.net/checks/5593ad8059ce4492804c07aff8e377eb
我想我也应该放一部分代码:
#include <stdio.h>
int clean_stdin()
{
while (getchar()!='\n');
return 1;
} //snippet gotten from http://stackoverflow.com/questions/14104013/prevent-users-from-entering-wrong-data-types
int main (void)
{
int row, pyramid_height, space, hash;
char c;
do
{
printf("\n Please enter a positive integer value, less than 24 as the height: ");
}
while (((scanf("%i%c", &pyramid_height, &c) != 2 || c!='\n') && clean_stdin()) || pyramid_height < 1 || pyramid_height > 23);
//snippet gotten from http://stackoverflow.com/questions/14104013/prevent-users-from-entering-wrong-data-types
请帮助:
此外,是否有更简单的方法来阻止用户输入错误的数据? 谢谢。
答案 0 :(得分:0)
你应该做这样的事情来要求用户输入
printf("Enter height < 23 and a non-negative number\n");
do{
printf("Height: ");
height = GetInt(); // ask user again until valid input is given
}while(height < 0 || height >23);
如果您不想使用GetInt(),也可以使用scanf执行此操作。只需用scanf("%d",&height);
替换GetInt行。除非输入错误的数字,否则它会起作用Height:
而不是Retry:
。
你应该删除clean_stdin函数。 pset1不需要这种精度。
现在剩下的部分是你没有在问题中提供的嵌套for循环,所以我假设你也有问题,因为你的程序无法正确处理0。
尝试这样的代替for循环。
for(int i=1; i<=height; i++){ // i number of #s in each step
for(int j=0; j<height-i; j++){ //print appropriate number of spaces
printf(" ");
}
for(int k=0; k<=i; k++){ //print #s
printf("#");
}
printf("\n"); //change line
}