如果条件奇怪的行为

时间:2017-05-24 10:04:58

标签: c cs50

我是自学成才的程序员 我在这里遇到一个问题,如果条件只进入(H OR T OR。) 不会得到字符串。转到(printf ("Enter valid characters please \n");

下面是我的代码:

int i = 0 ;
int L ;

printf ("Please enter the lenght of report \n"); 
scanf ("%d" , &L);

if ( L>=1 && L<=500 )
{
        printf ("Please enter the Reoprt \n");
        string P = get_string ();
        if (P[i] !='H' && P[i] != 'T' && P[i] != '.')
        {
                printf ("Enter valid characters please  \n");
        }
        else 
        {
                printf ("GOOD3 \n");
        }
}
else 
{
        printf ("Please enter valid Length \n"); 
}

1 个答案:

答案 0 :(得分:0)

您遇到此问题的原因是scanf("%d", &L)将从输入中获取一个或多个数字,而不是。因此,它会在输入您的号码后留下您输入的换行符。

当你致电get_string()时(我假设这与CS50库中的GetString()相同?),它看到的第一个字符是这个剩余的换行符,所以你得到的只是back是一个空字符串。

你可以轻松解决这个问题。只需将scanf ("%d" , &L);替换为L = GetInt();

或者,将scanf ("%d" , &L);替换为scanf ("%d%c" , &L, &newline);,将newline声明为char函数顶部的main()变量。这将消耗数字后面的换行符,以便GetString()不会将其视为空字符串。有关scanf()如何工作的更多详细信息,请在命令行键入man scanf