我正在学习C编程方法,我有一个关于endentation循环的问题。 我正在使用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 (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;
}
这段代码假设在我的例子中以字母“a”开头删除一个字母,然后,while循环将通过每个位置打印结果。
看起来第一部分正在工作,但是while循环永远不会被程序执行。
任何想法为什么?
谢谢
答案 0 :(得分:1)
你执行这个
s1[i] = '\0';
当i = 0时,所以while条件
while (s1[i] != '\0') { ...
是假的,你永远不会执行循环。
答案 1 :(得分:0)
在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'
,因此它甚至不会执行一次。
答案 2 :(得分:0)
更改
if (s1[i] == s2[j]){
printf("before %c\n", s1[i]);
s1[i] = '\0';
}
到
if (s1[i] == s2[j]){
printf("before %c\n", s1[i]);
s1[i] = ' ';
}
让您的while
循环正常工作。