循环结构:在C中为
代码: 我的问题是for循环到底是如何运行的,因为这个程序永远不会结束,但如果我编写循环结构:在C中为,c,loops,for-loop,C,Loops,For Loop,代码: 我的问题是for循环到底是如何运行的,因为这个程序永远不会结束,但如果我编写 int main() { int i; char p[]="Hello",b[]="World!"; for (i = 0; *p != '\0' ; i++, p+1); //what does the p+1 after , printf("%s%s",p,b); return 0; } 您计算p+1,但从不将其存储在变量p中。因此,您永远不会“沿着”字符串,也永远不会找到终
int main()
{
int i;
char p[]="Hello",b[]="World!";
for (i = 0; *p != '\0' ; i++, p+1); //what does the p+1 after ,
printf("%s%s",p,b);
return 0;
}
您计算
p+1
,但从不将其存储在变量p
中。因此,您永远不会“沿着”字符串,也永远不会找到终止字符
计算p+1
与p++
不同(后者计算p,然后将其递增并存储在p中)
另外,在for
语句后面有一个分号,因此在循环终止之前,您不会执行后面的任何操作。换句话说,printf(“%s%s”,p,b)
语句不是for
循环的一部分(以防万一)
通过将循环更改为:
for(i=0; *p != '\0'; i++, printf("hi")); //this prints out hi
您通常会这样做:
ello
llo
lo
o
这让你生气
for (i = 0; *p != '\0' ; i++, p++) {
printf("%s %s\n",p,b);
}
i++,p+1
中的逗号运算符只做这两件事,即递增i
然后计算(但丢弃)p+1
的结果。也许您的意思是i++,p++
您没有分配给p
,您在值中添加1,然后丢弃它。你的意思可能是p+=1
或p++
。当然,因为你从不改变p
。为什么你有一个变量i
,你什么都不用?@Kninnugp
不是一个可修改的l值。无法为其赋值。请注意,通常需要在printf()之后加一个换行符来强制显示输出。它在Windows上的工作方式必须稍有不同,因为我们看到无休止的基于Windows的C程序没有换行符,但这些程序不能正常地传输到Unix。
for (i = 0; *p != '\0' ; i++, p++) {
printf("%s %s\n",p,b);
}
Hello World
ello World
llo World
lo World
o World