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