在这个程序中:
#include<stdio.h>
int a[5],c=0;
int main()
{
printf("Enter no\n");
scanf("%d",&a);
for(int i=0;a[i];i=+2) {
printf("%d ",a[i]);
}
return 0;
}
我想输入12345
并获取输出1 3 5
,但程序永远不会终止。我怎么能这样做?
答案 0 :(得分:3)
老实说,你的代码遍布整个地方,看起来好像只是疯狂地猜测:
您无法将int
数组传递给scanf()
,要求它读取一个int
,并期望它将多个数字放在一起数字编号本身就是各个元素。你需要读一个字符串,或者读一个int
并自己提取数字。
变量c
未使用。
你的for
循环毫无意义。即使你已经填充了数组a
的所有元素,它仍然没有意义,而且你还没有。
这是您的代码的合理版本,读入字符串:
#include<stdio.h>
int main(void) {
char a[6];
printf("Enter no\n");
fgets(a, 6, stdin);
for (int i = 0; i < 5; i += 2) {
printf("%c ", a[i]);
}
putchar('\n');
return 0;
}
带输出:
paul@local:~/Documents/src/sandbox$ ./num
Enter no
12345
1 3 5
paul@local:~/Documents/src/sandbox$
请注意,这无法检查用户是否确实输入了五个字符,您的程序应该这样做。
答案 1 :(得分:2)
for循环以这种方式定义
for(initialization ; condition check ; variable update)
代码
for(int i=0;a[i];i+2)
{
printf("%d ",a[i]);
}
for循环的条件部分设置为a [i],这可能永远不会为假。所以循环无限运行。变量更新也不正确。我的价值应该更新。
试
for(int i=0; i<5; i+=2)
{
printf("%d ",a[i]);
}
答案 2 :(得分:0)
代码无限运行,因为循环内部没有任何变化会导致循环终止。循环内的任何位置都不会更改变量的值。如果a[i]
在第一次迭代中为真,那么它将永远保持为真,因为i
的值永远不会改变。