check50错误消息:在我的Mario.c pset1解决方案

时间:2016-12-26 20:39:47

标签: cs50

  

:(正确处理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          

请帮助:

此外,是否有更简单的方法来阻止用户输入错误的数据? 谢谢。

1 个答案:

答案 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
}