이것은 내 코드입니다. 내 메뉴는 계속 반복되며 입력을 요구하지 않습니다. fgets
이 예상대로 작동하지 않는 이유를 모르겠습니다.fgets가 작동하지 않습니다 (stdin full로 보임)
나는 그것을 반복 계속됩니다 내 코드 심지어 내가 루프를 제거 할 때 비록 실행하면 :
int main()
{
char input[3];
char opt1;
int flag=1,n;
/*hrtime_t start, end;*/
dlist_t lst;
list_init (&lst);
list_input (&lst);
bubblesort (&lst);
list_display(&lst);
while(flag == 1)
{
printf("\nMain Menu\n");
printf("-----------\n");
printf("1. Bubble Sort\n");
printf("2. Selection Sort\n");
printf("3. Quick sort\n");
printf("4. Merge Sort\n");
printf("5. Exit\n");
printf("\nEnter your option[1-5]: ");
fgets(input, 3, stdin);
opt1 = input[0];
/* If condition to display the main menu if user inputs enter */
if(opt1 == '\n')
{
flag =1;
continue;
}
n = strlen(input)-1;
if(input[n] == '\n')
{
input[n] = '\0';
} else {
printf("\nInvalid input. ");
printf("Please note that the maximum length of the input is 1.");
readRestOfLine();
flag =1;
continue;
}
switch(opt1)
{
case '1':
/*start = gethrtime();
bubbleSort(list);
end = gethrtime();*/
printf("\nBubble Sorted List\n");
break;
case '2':
/* start = gethrtime();
selectionSort(list);
end = gethrtime(); */
printf("\nSelection Sorted List\n");
break;
case '3':
/*start = gethrtime();
quickSort(list, 0, list->list_len-1);
end = gethrtime(); */
printf("\nQuick Sorted List\n");
break;
case '4':
/*start = gethrtime();
list->head = mergeSort(list->head);
mergeSortReverse(list);
end = gethrtime(); */
printf("\nMerge Sorted List\n");
break;
case '5':
SNExit();
list_free (&lst);
printf("\n\n ********* THANK YOU **********");
return EXIT_SUCCESS;
default :
{
printf("\nPlease enter valid option\n");
break;
}
}
}
return EXIT_SUCCESS;
return 0;
}
/****************************************************************************
* Function readRestOfLine() is used for buffer clearing.
****************************************************************************/
void readRestOfLine()
{
int c;
/* Read until the end of the line or end-of-file. */
while ((c = fgetc(stdin)) != '\n' && c != EOF)
;
fflush(stdin);
/* Clear the error and end-of-file flags. */
clearerr(stdin);
}
'opt1'을 켜고 있지만 스위치 설명에 기본값 : 대소 문자가 없습니다. 나는 구체적으로 당신의 질문이 무엇인지 모르겠다. 그러나 나는 그것에 대해 조사 할 것이다. – Nanomurf
입력 관리 코드를 주어진 입력을 처리하는 코드와 분리 된 함수로 분리해야합니다. 'fflush (stidin)'을 사용하면 이식 할 수 없습니다. –
입력 버퍼'input'을 사용자가 입력 할 수있는 가장 긴 줄보다 큰 큰 크기로 늘려야한다고 생각합니다. 1024 또는 4096과 같은 숫자를 선택하십시오. 그러면 전체 행, 개행 문자 및 모두를 읽고 파싱하고 관련없는 문자는 무시할 수 있습니다. –