while循环在for循环后不执行

时间:2014-01-26 21:15:57

标签: c

我正在学习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循环永远不会被程序执行。

任何想法为什么?

谢谢

3 个答案:

答案 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';
}   

所以它保持不变(ij都递增)。当您进入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循环正常工作。