2014-02-16 22 views
0

所以 - 我的程序不停止条件(str2 [o]!='+') 所以如果有人知道为什么以及如何解决它,它会帮助我(:。。。。我的程序并不停止条件

这是我的代码 - 。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
char str3[9]= "2+48*4+7"; 
char str2[9]; 

int w =0,o = 0; 

for(w = 0; w < 9; w++) 
{ 
    if(str3[w] == '*') 
    { 
     while(str2[o] != '+') 
     { 
      str2[o] = str3[w]; 
      o++; 
      w++; 
     } 
    } 
} 

printf("%s\n",str2); 

} 

谢谢大家谁可以看到并告诉我,为什么程序不上规定的条件停止

+1

这段代码会做什么和预期的结果? (str2 [o] = str3 [w]!='+') { o ++; – herohuyongtao

+1

w ++; } – MAKZ

+0

或简单地while((str2 [o ++] = str3 [w ++])!!='+'); – MAKZ

回答

0
while(str2[o] != '+') 
    { 
     str2[o] = str3[w]; 
     o++; 
     w++; 
    } 

假设Ø== X你将值赋给str2 [x]而你看到str2 [x + 1] =='+',但str2 [x + 1]是空的。

+0

它不起作用)? – user3313154

1

目前+将被复制到str2,o索引将指向下一个字符,这很可能不会是+,所以你的条件永远不会是真的。这可能是可能的解决方案:

do 
    { 
     str2[o] = str3[w]; 
     o++; 
     w++; 
    } 
    while(str2[o-1] != '+'); 
1

此行

while(str2[o] != '+') 

挑起为str2的元素没有被正确读取之前初始化未定义行为。

为了解决这个问题做

char str2[9] = "": 
+0

,当您尝试打印时会发生同样的情况,因为它不是零终止。当o = 0时为 –

0

你需要检查在str2中的最后更新值,但你正在检查这是不符合一个字符,这样循环将不断重演初始化的下一个值。你可以这样做:

while(str2[o-1] != '+'){ 

    str2[o] = str3[w]; 
    o++; 
    w++; 
} 
+0

; 'str2 [-1]!='+''? – MAKZ