2013-04-20 80 views
1

我正在做一個小程序,它將使用一個用動態數組實現的堆棧來檢查一個短語是否有平衡的括號和括號。到目前爲止,我只是嘗試將一個短語傳遞給isBalanced函數,並嘗試逐個打印每個字符。當程序到達:指針/函數參數問題?

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

我得到一個分段錯誤和有關傳遞類型char和期望類型int.Any幫助警告是非常讚賞。

char nextChar(char* s) 
{ 
     static int i = -1; 
     char c; 
     ++i; 
     c = *(s+i); 
     if (c == '\0') 
      return '\0'; 
     else 
      return c; 
} 

int isBalanced(char* s) 
{ 
     while(nextChar(s) != 0){ 
      printf("%s\n", nextChar(s)); 
     } 
     return 0; 
} 

int main(int argc, char* argv[]) 
{ 
     char* s=argv[1]; 
     int res; 
     res = isBalanced(s); 

     return 0; 
} 
+1

你***真的真的真的***需要閱讀的printf'手動()'嘗試使用它之前。錯誤是顯而易見的。 – 2013-04-20 10:36:58

+0

nextChar(s)返回char,而不是char *。 %s需要char *。 – BLUEPIXY 2013-04-20 10:39:02

+0

printf(「%c \ n」,nextChar(s));這將工作 – 2013-04-20 10:39:25

回答

1

printf預計char *,但是,這種代碼

printf("%s", nextChar(s)); 

char,因爲nextChar(s)回報char(如果你必須得到警告,如果使用編譯好的)。

所以,這也改變,

printf("%c\n", nextChar(s)); 

,你打電話nextChar(s)兩次,失去了第一個電話的價值。
這應該做你期待什麼:

int isBalanced(char* s) 
{ 
     char ch; 
     while((ch = nextChar(s)) != 0){ 
      printf("%c\n", ch); 
     } 
     return 0; 
}