C 异常情况下的奇怪行为

C 异常情况下的奇怪行为,c,cs50,C,Cs50,我是自学成才的程序员 这里我面临一个问题,如果条件只输入(H或T或) 没有得到字符串。转到(printf(“请输入有效字符”);) 下面是我的代码: 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 \

我是自学成才的程序员 这里我面临一个问题,如果条件只输入(H或T或) 没有得到字符串。转到(
printf(“请输入有效字符”);

下面是我的代码:

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"); 
}
inti=0;
int L;
printf(“请输入报告的长度\n”);
scanf(“%d”和“&L”);

如果(L>=1&&L出现此问题的原因是因为
scanf(“%d”,&L)
将从输入中提取一个或多个数字,而不提取任何其他数字。因此,它将保留键入数字后输入的换行符

当调用
get_string()
(我假设这与CS50库中的
GetString()
相同?)时,它看到的第一个字符是这个剩余的换行符,因此返回的只是一个空字符串

您可以很容易地解决这个问题。只需将
scanf(“%d”,&L);
替换为
L=GetInt();


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

@GauravPathak cs50.h,是的,我们都讨厌它。它被键入char*。您显示的代码有什么问题?对于一些示例输入,预期和实际输出是什么?您是否尝试过在调试器中监视变量时逐行遍历代码?@Someprogrammerdude(讽刺)为什么?你不应该为我做我的工作吗?免费吗?:PEven如果你是自学成才的,你听说过循环吗?这似乎就是你要寻找的。还有a。问题是什么?在我看来效果很好?你是在运行之前编译代码吗?(假设你想检查报告是否以H或t开头。)