2014-08-27 83 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