2014-02-16 23 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