2014-02-16 73 views
0

爲什麼以下程序保存+符號偶數循環應該在她看到此符號時結束。該程序打印不需要的東西

我的代碼 -

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

int main() 
{ 
char str[10]= "2+48*46+1"; 
char str1[10]; 
int i,j = 0; 

for(i = 0; i<10; i++) 
{ 
    if(str[i] == '*') 
    { 
     while(str1[j-1] != '+') 
     { 
      str1[j] = str[i+1]; 
      i++; 
      j++; 
     } 
    } 
} 
printf("%s\n",str1); 
} 

目標清除乘法後的數字簽名支持+跡象。

感謝助理誰可以告訴我爲什麼軟件保留+標誌,並建議我的方式來解決它(:

+0

它不 - 打印'46'。 – devnull

+0

它打印46+但我需要它只打印46 – user3313154

+0

我改變它while(str [i]!='+')但它仍然是一樣的東西 – user3313154

回答

1

它不斷的加號,因爲你跳出while循環,當目標字符串有一個加號作爲。最後一個字符應測試源字符串,而不是 - 像

while(str[i+1] != '+') 
    { 
     str1[j++] = str[++i]; 
    } 
+1

我想通過使'str [++ i ]'而不需要稍後再做增量。 –

+0

...或者做兩個增量周圍的作業:'str1 [j ++] = str [++ i]' –

+0

好點 - 編輯! –

3

您訪問str1[-1]它調用未定義行爲

你不空終止str1,讓您的打印46之後str1的值也是如此。 將+複製到字符串中,以便出現,但在此之後可能會出現str1中的其他非零字節。最好不要複製+並以null結束字符串。

j = 0; 
while (str[i+j] != '+') 
    str1[j++] = str[i+j]; 
str1[j++] = '\0'; 
printf("%s\n", str1); 
1

您代碼不正確。因爲(j-1)可能是負數,並且str1未初始化。