2013-10-13 2 views
3

Я делаю поисковую программу, но она не выводит предложения для моего ввода. В конце ничего не отображается. Просто 'поиск:' в строке 1.Поиск текста с использованием функции strstr в C

#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", 
}; 

void find_track(char search_for[]) 
{ 
int i; 
for (i = 0; i < 5; i++) { 
if (strstr(tracks[i], search_for)) 
printf("Track %i: '%s'\n", i, tracks[i]); 
} 
} 

int main() 
{ 
char search_for[80]; 
printf("Search for: "); 
fgets(search_for, 80, stdin); 
find_track(search_for); 
return 0; 
} 

с помощью Visual Studio 2010 с C

ответ

3
fgets(search_for, 80, stdin); 

если вы даете вход heart после давят возврата ключа

fgets() читает символ новой строки на search_for

Now search_for=="heart\n"; 

удалить \n в конце search_for

if(search_for[strlen(search_for)-1]=='\n') 
     search_for[strlen(search_for)-1]='\0'; 

    find_track(search_for); 
+0

Другой вопрос: как вводить символы ввода нижнего регистра с использованием функций tolower? –

+0

'tolower()' Преобразует c в его нижний регистр, если c является строчной буквой и имеет младший эквивалент. Если такое преобразование невозможно, возвращаемое значение не изменяется. См. Примеры, объясняющие [tolower()] (http://www.tutorialspoint.com/c_standard_library/c_function_tolower.htm) и [Здесь] (http: // www .cplusplus.com/reference/cctype/tolower /) – Gangadhar

0

простое решение заключается в замене:

fgets(search_for, 80, stdin); 

с

fscanf(stdin, "%s", search_for); 

С помощью этого метода, будьте осторожны, чтобы не вводить более 79 символов в вашем поиске хоть.

+0

Я бы * не * рекомендую заменить 'fgets' на' fscanf', именно из-за проблемы с переполнением буфера. В производственном коде это может быть потенциальной проблемой безопасности. –

+0

Также эти функции ведут себя по-разному. 'fscanf' читается только до любого пробела. –

Смежные вопросы