2010-09-28 80 views
1
int isEmpty(char x [1000]){ 
    int i = 0; 

    while(x[i] == " " || x[i] == "/t" || x[i] == ""){ 
     i++; 
    } 

    if (i != 999) 
     return 1; 
    } 

    return 0; 
} 

我收到的錯誤:Ç簡單數組訪問比較

警告:在未指定的行爲字面字符串比較

I:指針和整數

警告之間的比較意識到我的代碼讀起來太像Java了,我還沒有完全掌握C語法。

+0

你應該知道''/ t「'不是製表符,你可能是''\ t」' – 2010-09-28 17:56:42

+0

除了別人已經解釋過的錯誤之外,你應該看看字符分類函數, 'isblank'只適用於C99,'isspace'也適用於遺傳性C. – 2010-09-28 18:19:51

+0

將'if'和兩個'return'語句改爲'return i!= 999;'。 – frayser 2010-09-29 00:10:46

回答

2

既然你與字符常量比較,你需要使用單引號,而不是雙引號:

x[i] == ' ' 

雙引號用於字符串常量像"foo"。所以"\n"是一個帶有單個字符的字符串,'\n'是一個char常量。

+0

非常感謝codaddict :) – Kay 2010-09-28 17:55:39

+2

如果你要比較字符串,==會比較字符串開始的地址,而不是字符串的內容,這幾乎肯定不是你想要的。 – JamesMLV 2010-09-28 17:57:31

0
  1. 字符應該包含在' '(單引號)中。
  2. 這是\t &不是/t爲製表符。
  3. 刪除空白字符串""(相當於NULL)。
5

問題是您正在使用字符串文字表達char值。相反,用雙引號引起來的"使用單引號'

while(x[i] == ' ' || x[i] == '\t') { 

夫婦的其他問題。

  • 你可能是指\t而不是/t。前者是一個製表符,而後者是兩個字符
  • 不確定你想要用""得到什麼結果。也許\0
+0

......你應該在整個條件列表前面貼一個'i <1000 &&(...)'。 – caf 2010-09-29 09:40:52

0

除了以前的答案,我想

  1. 應該如果NULL (\0)x發現檢查繼續?我認爲答案可能是:
  2. 最好將空字符的檢測邏輯與空字符串的邏輯分開
  3. (i != 999)部分不清楚。難道不是(i == 1000)
  4. OP代碼中有不匹配的圓括號。

這裏是我的版本:

/* return 1 when c is considered empty, 0 otherwise */ 
int isEmptyChar(const char c) { 
    return c == ' ' || c == '\t'; 
} 

enum { N = 1000 }; 

/* return 1 when x is considered empty, 0 otherwise */ 
int isEmptyString(const char x[ N ]) { 
    for(int i = 0; i < N; i++) { 
     if(x[ i ] == '\0') { 
      break;  /* stop, if NUL termination is found */ 
     } 
     if(! isEmptyChar(x[ i ])) { 
      return 0; /* early return if non-empty char is found */ 
     } 
    } 
    return 1; 
} 
0
int isEmpty(const char *x) 
{ 
    return EOF==sscanf(x,"%*s"); 
} 

也應該做你想做的,是C89和測試空格爲您服務。