2013-10-13 4 views
1

В настоящее время я делаю программу словаря в C. Как обнаружить пустую строку на stdin? Использование search_for для ввода.Обнаружить пустую строку на функции stdin и tolower в C

void find_track(char search_for[]) 
{ 

     int i; 
     for (i = 0; i < 5; i++) { 
      if (strstr(tracks[i], search_for)){ 
      printf("The meaning of %s: %s\n",tracks[i], meaning[i]); 

       break; 
      } 
     } 

     if (!strstr(tracks[i], search_for)) { 
       printf("%s could not found in dictionary.\n",search_for); 
      } 

} 

Опять же, как уменьшить нижний предел ввода с помощью функции уменьшения?

int main() 
{ 
    int setloop =1; 
    titlemessage(); 
    do { 

     char search_for[80]; 
     char varchar; 
     printf("Search for: "); 
     fgets(search_for, 80, stdin); 
      if(search_for[strlen(search_for)-1]=='\n') 
      search_for[strlen(search_for)-1]='\0'; 

     find_track(search_for); 
     printf("Press ENTER to start new search\n"); 
     //printf("Press 'q' to exit the program\n\n"); 

      varchar = getchar(); 
      if (varchar == 10) {  
       continue; 
      }else { 
       break; 
      } 
    } while (setloop = 1); 
    return 0; 

} 

Любые методы будут оценены.

+0

Вы должны проверить возвращаемое значение из 'fgets()', чтобы было что-то прочитанное. –

ответ

1

Detect пустой строки на стандартном ввод и ToLower функционировать в C

fgets(search_for, 80, stdin); 
if(search_for[strlen(search_for)-1]=='\n') 
     search_for[strlen(search_for)-1]='\0'; 


    if(strlen(search_for)==0) 
    { 
    // empty string, do necessary actions here 
    } 

char ch; 

tolower() Преобразует ч его строчной эквивалент, если ч является заглавной буквой и имеет строчной эквивалент. Если такое преобразование невозможно, возвращаемое значение не изменяется.

for(i = 0; search_for[i]; i++){ 
     search_for[i] = tolower(search_for[i]); // convert your search_for to lowercase 
    } 
0

После прочтения ввода, потенциально изменить каждый char в нижний регистр.

// Test fgets() return value, use sizeof 
    if (fgets(search_for, sizeof search_for, stdin) == NULL) { 
    break; 
    } 
    size_t i; 
    for (i = 0; search_for[i]; i++) { 
    search_for[i] = tolower(search_for[i]); 
    } 
    // Advantage: we've all ready run through `search_for` & know its length is `i`. 
    // Also avoid a `[strlen(search_for)-1]` which could be -1 
    if ((i > 0) && (search_for[i-1] =='\n')) { 
    search_for[--i] = '\0'; 
    } 
    // If empty line entered (OP's "detect empty string on stdin") 
    if (i == 0) { 
    break; 
    } 
    find_track(search_for); 

    #if 0 
    // Reccomedn delete this section and using the above empty line test to quit 
    //printf("Press 'q' to exit the program\n\n"); 
    varchar = getchar(); 
    if (varchar == 10) {  
     continue; 
    } else { 
     break; 
    } 
    #endif 

// OP likel want to _test_ setloop (==), not _assign_ setloop (=) 
// } while (setloop = 1); 
} while (setloop == 1); 
Смежные вопросы