此程序中的循环意外终止。当我使用输入 t=4 和 s="qi"进行测试时,程序运行时打印的 t 值是 0 而不是预期值 4。出了什么问题?
#include<stdio.h>
int main()
{
int t,flag=0;
char s[2];
scanf("%d ",&t);
while(t)
{
scanf("%s",s);
if(s[1]=='i')
{
if(flag==0)
flag=1;
else
flag=0;
}
else if(s[1]=='b')
{
}
else if(s[1]=='r')
{
}
printf("%d\n",t);
t=t-1;
}
}
最佳答案
数组 s
的大小为 2。这意味着它只能容纳一个字符。你输入两个字符,“qi”
,空终止符被写入相邻的内存中,覆盖那里的任何内容。
这将导致未定义的行为。你运气不好,显然覆盖了变量 t
的第一个字节,这将在小端机器上将其设置为 0(在你的情况下)。
解决方案是将字符串扩大到至少 3 个元素,并将 scanf() 中的输入限制为最多两个字符。
关于c - 虽然循环在 C 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831699/