У меня возникла проблема с этой функцией, которую я создал, она была создана для минимизации кода в основной функции. (Меня учили, вы должны иметь минимальное количество кода в основной функции) ....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 и распечатал «Недопустимый вход повторите попытку», и только после этого он будет работать правильно и дождитесь, когда пользователь что-то введет ...
У кого-нибудь есть идея, как обойти эту ошибку?
благодаря
Не используйте 'scanf()'. –
@iharob i didnt я использовал 'fgets()' я только что вызвал функцию, которая его в scanInput – Jack
О, 'while (strlen (search) == 0)' simple 'while (* search == '\ 0') ', но без накладных расходов на ненужный вызов функции. И снова 'if (* search == 0) ...'. –