2014-08-27 87 views
2

以下代碼適用於scanf,但我不知道如何使它與fgets一起工作(搜索總是失敗),請問您能否幫助我(我是C的初學者)?這段代碼可以使用fgets嗎?

如果可能,你能告訴我爲什麼它似乎不適用於fgets

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




char tracks[][80] = { 
    "I left my heart in Harvard Med School", 
    "Newark, Newark - a wonderful town", 
    "Dancing with a Dork", 
    "From here to maternity", 
    "The girl from Iwo Jima", 
}; 


int main(){ 
    char word[80]; 
    puts("Hello, type a word: "); 
    fgets(word, 80, stdin); 
// scanf("%79s", word); 

    for(int i= 0; i < 5; i++){ 
     if(strstr(tracks[i], word)){ 
      printf("Found the track: %s\n", tracks[i]); 
      break; 
     } 
    } 


    return 0; 
} 
+2

'fgets'離開字符串中的換行符,'scanf'沒有。 – Barmar 2014-08-27 17:13:26

回答

5

fgets(word, 80, stdin)scanf("%79s", word)之間的區別是,fgets一個包括'\n'空終止之前,而scanf不會。這就是爲什麼strstr返回NULLfgets:最後有一個不匹配的'\n'

一般有兩種方法來製作琴絃再次等於 - 你可以從任何的word(首選),最後刪除'\n',或添加到'\n',你搜索詞的結尾(不推薦)。

int len = strlen(word); 
if (len != 0 && word[len-1] == '\n') { 
    word[len-1] = '\0'; 
} 
+1

+1小增加:'scanf(「%79s」'不會掃描任何空格,而'fgets()'會(直到第一個'\ n'')。 – chux 2014-08-27 17:16:27