2014-11-18 3 views
0

В моей программе для сортировки связанного списка с использованием выбора и сортировки пузырьков, getdata() используется для получения данных от пользователя.Преждевременный выход входного контура

getdata() 
{ 
    int val; 
    char c; 
    struct node *new; 

    new = NULL; 
    do { 
     printf("Enter a value:\n"); 
     scanf("%d",&val); 

     append(&new,val); 

     printf("Any more nodes(y/n):\n"); 
     c=getchar(); 
    } while(c =='y' || c =='Y'); 
    start = new; 
} 

Но когда я запускаю свою программу, выход

Enter a value: 3 

Any More Nodes (Y/N): Linked List Before Sorting: 3 
Linked List After Selection Sorting: 3 

Enter a value: 2 

Any More Nodes (Y/N): Linked List Before Sorting: 2 
Linked List After Bubble Sorting: 2 

Я не в состоянии типа «г/п» в нем. Может кто-нибудь сказать мне, что не так?

+0

Действительно ли ваша проблема имеет отношение к спискам или сортировке? Это звучит как проблема обработки ввода для меня. Измените название и теги. –

+0

использовать 'fflush (stdin);' after scanf –

ответ

0

scanf("%d", &val); оставляет символ новой строки во входном буфере, так что getchar() считывает символ новой строки, которая не является ни y, ни Y, поэтому цикл завершается.

Вы, вероятно, следует использовать:

if (scanf(" %c", &c) != 1) 
    break; 

Вы должны также проверить результат scanf("%d", &val), чтобы убедиться, что вы получите значение.

Ваша функция также должна быть объявлена ​​с явным типом возврата. Для показанного кода это должно быть void. Обратите внимание, что ваш код не обязательно привязан к глобальной переменной start. Если вы изменили функцию на struct node *getdata(void) { …; return new; }, вы можете использовать ее в более общем плане.

-1

вместо c = getchar(); try cin.get();

+0

C язык указан ... –

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