2016-01-12 2 views
0

У меня возникла проблема с этой функцией, которую я создал, она была создана для минимизации кода в основной функции. (Меня учили, вы должны иметь минимальное количество кода в основной функции) ....while loop не останавливается на функции c

Heres код (илл объяснить впоследствии этот вопрос подробно):

void startPrediction(struct TrieNode* root, struct TrieNode* pntr) 
{ 
    char result[50]; 
    char search[256]; 
    char exitProg[5]; 

    while(1) 
    { 
     memset(&result[0], 0, sizeof(result)); 
     memset(&search[0], 0, sizeof(search)); 
     memset(&exitProg[0], 0, sizeof(exitProg)); 

     while(strlen(search) == 0) 
     { 
      printf("Enter: "); 
      scanInput(search); 

      search[strcspn(search, "\n")] = 0; 

      if(strlen(search) == 0) 
       printf("Invalid Entry, Please Retry!\n"); 
     } 

     //check for a space in the word 
     removeSpaces(search); 

     removePunctuationAndSpecial(search); 

     trieSearch(root, &pntr, search, result); 

     printf("\n\n"); 

     wordSelectionDisplay(root, pntr, result); 

     printf("Would you like to exit?? (Y/N)\n"); 
     printf("Enter: "); 
     scanf("%s", exitProg); 

     if((exitProg[0] == 'Y') || (exitProg[0] == 'y')) 
     { 
      printf("Exiting...\n"); 
      return; 
     } 
     else 
      printf("Continuing Program...\n"); 
    } 
} 

Все это код отлично до тех пор, пока пользователь не спросит пользователя, хотят ли они выйти ... Если они положили Y/y, тогда это нормально, и он выйдет, если они поместили N/n, тогда код начнется с вершины цикла while и пройдет, но не остановится в функции scanInput(search);, которая содержит только код кода fgets(input, sizeof(input), stdin); ...

он прошел бы мимо него, затем перешел в инструкцию if и распечатал «Недопустимый вход повторите попытку», и только после этого он будет работать правильно и дождитесь, когда пользователь что-то введет ...

У кого-нибудь есть идея, как обойти эту ошибку?

благодаря

+0

Не используйте 'scanf()'. –

+0

@iharob i didnt я использовал 'fgets()' я только что вызвал функцию, которая его в scanInput – Jack

+0

О, 'while (strlen (search) == 0)' simple 'while (* search == '\ 0') ', но без накладных расходов на ненужный вызов функции. И снова 'if (* search == 0) ...'. –

ответ

2

Это потому, что scanf() покинул '\n' во входном буфере и при вызове функции снова ее простой возвращается, как если бы пользователь нажал '\n', вы можете сделать это

int chr; 
while (((chr = getchar()) != EOF) && (chr != '\n')); 

в конце цикла.

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