0
我有這個函數,我已經創建了一個問題,它已被創建爲最小化主函數中的代碼。 (我是教你應該在主函數代碼最小量)....雖然循環不停止在一個函數c
繼承人的代碼(生病之後解釋詳細的問題):
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我沒有使用'fgets()'我只是調用了它在scanInput中的函數 – Jack
哦,'while(strlen(search)== 0)'很簡單'while(* search =='\ 0') ',但沒有不必要的函數調用的開銷。再一次'if(* search == 0)...'。 –