2014-01-26 101 views
-1

我正在学习C编程方法,我有一个关于循环的问题。 我正在使用linux debian进行编译。while循环在for循环后不执行

这里是代码。

#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循环永远不会被程序执行。

有什么想法为什么?

谢谢

+2

那么,你的循环条件评估为false。所以有时间倾斜如何使用调试器并检查变量。 – OldProgrammer

+0

空字符表示字符串在该位置结束,而不是它应该被视为跳过字符。我不确定你的代码是否假设。 – Jems

+0

这个问题似乎是无关紧要的,因为它没有显示任何调试尝试。 – 2014-01-26 21:22:40

回答

1

你执行这个

s1[i] = '\0'; 

i = 0时,所以虽然条件

while (s1[i] != '\0') { ... 

是假的,你永远不执行该循环。

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',所以它不会执行一次。

+0

非常感谢你的迅速答复。我完全理解我只是需要复制i + 1值而不是'\ 0'值。 – neonet

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循环工作。