C while循环在for循环之后不执行
我正在学习C编程方法,我有一个关于循环的问题。 我正在使用linux debian进行编译 这是代码C while循环在for循环之后不执行,c,C,我正在学习C编程方法,我有一个关于循环的问题。 我正在使用linux debian进行编译 这是代码 #include <stdio.h> int main () { char s1[] = "abcdef"; char s2[] = "aaaaaa"; int i, j; printf("\ndebut:%s\n", s1); for (i = j = 0; s1[i] != '\0'; ++i, ++j){ if
#include <stdio.h>
int main ()
{
char s1[] = "abcdef";
char s2[] = "aaaaaa";
int i, j;
printf("\ndebut:%s\n", s1);
for (i = j = 0; s1[i] != '\0'; ++i, ++j){
if (s1[i] == s2[j]){
printf("before %c\n", s1[i]);
s1[i] = '\0';
}
else if (s1[i] != s2[j]){
s1[i] = s1[i];
printf("after copy %c\n", s1[i]);
}
}
printf("\nEnd of for loop write final result\n.");
i = j = 0;
while (s1[i] != '\0'){
printf("final is :%c ", s1[i]);
++i;
}
return 0;
}
#包括
int main()
{
字符s1[]=“abcdef”;
字符s2[]=“AAAAA”;
int i,j;
printf(“\n但:%s\n”,s1);
对于(i=j=0;s1[i]!='\0';++i,++j){
if(s1[i]==s2[j]){
printf(“在%c\n之前”,s1[i]);
s1[i]='\0';
}
如果(s1[i]!=s2[j]){
s1[i]=s1[i];
printf(“在副本%c\n之后”,s1[i]);
}
}
printf(“\n循环写入最终结果的名称”);
i=j=0;
而(s1[i]!='\0'){
printf(“最终版本为:%c”,s1[i]);
++一,;
}
返回0;
}
这段代码假设在我的示例中删除开头字母“a”的一个字母,然后while循环将遍历每个位置以打印结果
看起来第一部分正在工作,但程序从未执行while循环
你知道为什么吗
谢谢您执行此操作
s1[i] = '\0';
当i=0时,while条件
while (s1[i] != '\0') { ...
如果为false,则从不执行循环。在for循环的第一次迭代中,将
'\0'
分配给s[0]
:
// s1[0] is 'a', s2[0] is 'a'
if (s1[i] == s2[j]){
printf("before %c\n", s1[i]);
s1[i] = '\0';
}
所以它保持不变(因为i
和j
都是递增的)。当您进入while
循环时,s[0]
仍然是'\0'
,因此它甚至不会执行一次。更改
if (s1[i] == s2[j]){
printf("before %c\n", s1[i]);
s1[i] = '\0';
}
到
使您的
while
循环工作。那么,您的循环条件的计算结果为false。因此,是时候学习如何使用调试器并检查变量了。空字符表示字符串在该位置结束,而不应认为它跳过了一个字符。我不确定你的代码是否假设了这一点。这个问题似乎离题了,因为它没有演示任何调试尝试。将s1[I]=s1[I]
更改为你想做的任何事情(可能是s1[I]=s2[I]
或其他什么)是的,你肯定应该尝试调试你的代码(printf通常就足够了)在问你是否真的想学习之前。无论如何,为了帮助您,我以更清晰的方式缩进了您的代码(无论算法如何),非常感谢您的快速回答。我完全理解我只需要复制i+1值而不是“\0”值。
if (s1[i] == s2[j]){
printf("before %c\n", s1[i]);
s1[i] = ' ';
}