2014-03-28 14 views
0

我是C新手,正在編寫一個程序,用於檢查用戶輸入的單詞是否是合法單詞。我已經搜索了stackoverflow的建議,但很多都是針對特定情況的非常具體。請在我惹火之前,我知道這個語法不正確,但尋找一些關於如何解決它的建議。我的主要問題是如何告訴程序檢查下一行(在「\ 0」之後)。也許while條件不是告訴C檢查直到沒有更多行存在的最好方式。在下面的代碼中,我有用於測試的「userword」的樣本比較字符串,但最終這將根據用戶輸入而變化。在用戶文本中檢索/比較文件中的字符串

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

int main (void) 
{ 
    FILE *fp; 
    fp = fopen("/usr/share/dict/words", "r"); 
    char line[50]; 
    while(fgets(line,50,fp) != NULL) 
    { 
     if(!strcpy(line,"userword")) 
     { 
      printf("Word exists\n"); 
      return 0; 
     } 
    } 
    printf("Word not found, try again.\n"); 
    return 0; 
} 
+0

直覺好像我需要嵌套的「而」循環後,其檢查下一個字符串的文件中的另一環找到每個「\ 0」。我大概可以想出如何尋找那個結局角色,但不知道我如何去到下一行。還是C查看這個文件作爲一個連續的字符串,所以我只需要檢查每個「\ 0」之間的字符? – Andy

+3

'strcpy()'?你的意思是'strcmp()'? – jfly

+0

@jfly呃是的。我知道我不應該這樣做102發燒。非常感謝兄弟 – Andy

回答

3

strcpy()複製一個字符串。您應該使用比較兩個字符串的strcmp()

其次,當您從/usr/share/dict/words讀取一行時,最後會出現一個換行符。你要麼需要刪除換行符(你一會兒後添加此之前的if):

line[strlen(line) - 1] = '\0'; 

或者把它比作userword\n

+1

請注意,strlen()可以返回零... – joop

+0

良好的捕獲。 @joop是正確的。上面的代碼需要一些額外的錯誤檢查,以確保您不索引行[-1]。 – esorton

+0

這很酷。當我添加「\ n」似乎工作的比較字符串。謝謝@esorton – Andy

0

我建議strncmp()這樣的伎倆,因爲fgets()包括換行符:

if(!strncmp(line, "userword", strlen(line) - 1))