我的情况是我需要输入一些字符,并且在读取特定字符(这里是 *)后我需要跳出循环。
代码:
void main()
{
int i=0,temp=0;
char a[100];
printf("Enter the array\n");
for(i=0;a[i]!='*';i++)
{
scanf("%c",&a[i]);
}
}
即使我输入“*”字符,它也不会跳出循环。
我更改了如下所示的代码,它可以正常工作。
void main()
{
int i=0,temp=0;
char a[100];
printf("Enter the array\n");
for(i=0;;i++)
{
scanf("%c",&a[i]);
if(a[i]=='*')
break;
}
}
第一个代码有什么问题? 我正在使用 gcc 编译器。
最佳答案
void main() { int i=0,temp=0; char a[100]; printf("Enter the array\n"); for(i=0;a[i]!='*';i++) { scanf("%c",&a[i]); } }
测试 a[i]!='*'
不是使用与此语句中使用的相同的 i
值执行的
scanf("%c",&a[i]);
在扫描和测试之间,i
递增。
顺序是:
- 将
i
设置为0
- 如果
i
不再小于100
则退出循环 - 针对
*
测试a[0]
- 扫描进
a[0]
- 增加
i
- 如果
i
不再小于100
则退出循环 - 针对
*
测试a[1]
- 扫描进
a[1]
- 增加
i
- 如果
i
不再小于100
则退出循环 - 等等...
从上面您还了解到,代码会在 分配任何值之前测试 a
的元素。这样做会引发臭名昭著的未定义行为,这是一件坏事,因为从这一刻起任何都可能发生。
关于c - c中for循环问题中的特殊字符读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45263075/