2016-07-14 4 views
1

Я пытаюсь написать небольшую программу, в которой пользователь указывает, что они хотят ввести n много nunmbers, после чего им предлагается ввести n много поплавков в последующих строках с подсказкой. Ожидаемый выходДля пропуски цикла scanf()

$./a.out 
How many number (at least two)? > 4 
Enter a number (3 more to enter) > 2 
Enter a number (2 more to enter) > 3 
Enter a number (1 more to enter) > 5 
Enter a number (0 more to enter) > 7 

Однако моя программа в настоящее время читает в первый вход (2, в случае моего примера), а затем пропускает ввод данных пользователем остальной части подсказок.

Выход для моего текущего кода

$./a.out 
How many number (at least two)? > 4 
Enter a number (3 more to enter) > 7 
Enter a number (2 more to enter) > 
Enter a number (1 more to enter) > 
Enter a number (0 more to enter) > 

Я искал решение here, here и here, но я не мог получить что-нибудь работать. Есть ли какие-либо предложения о том, как заставить scanf работать в этом? Я бы предпочел использовать scanf, поскольку мы не рассматривали использование каких-либо функций get.


#include <stdlib.h> 
#include <stdio.h> 

main(){ 
    int i,n; 
    int temp_count,count,rv; 
    float number[10000]; 
    printf("How many number (at least two)? > "); 
    rv = scanf("%d",&n); 
    if(n<2||rv!=1){ 
     printf("Please enter at least two numbers"); 
    } 
    count=n; 
    for(i=0;i<n;i++){ 
     count--; 
     printf("Enter a number (%d more to enter) > ",count); 
     fflush(stdin); 
     scanf(" %.2f",number[i]); 
    } 
    return(0); 
} //end main 

ответ

2

Как пользователь @ user3121023 комментарии (комментарий в настоящее время удален):

scanf("%f",&number[i]); ampersand needed. Do not fflush(stdin); 

Последний аргумент scanf() должен быть указатель на буфер, в котором будет храниться вход. В вашем случае number[i] является float, а не float *. Добавление & до number[i] даст scanf() адрес i: th позиции массива.

Кроме того, использование fflush() в потоке ввода - это плохая идея, поскольку она вызывает неопределенное поведение. Он может работать, но может и не быть. См. here для справки по телефону fflush().

Примечание: fflush() на входном потоке четко определен по POSIX (не стандарт C) и только тогда, когда поток доступен для поиска. Стандартный вход обычно не доступен для поиска.

+0

Ах, пропуская и была тупой ошибкой, которую я не поймал. Однако даже при удалении fflush (...) я не получаю правильный результат. –

+2

@ Zermelo's_Choice Также исправить спецификатор формата. Сканировать '% f'. Вы можете использовать '% .2f' с' printf() ', но не с' scanf() '. – Kusalananda

+1

@ Zermelo's_Choice «Я не получаю правильный вывод», но также принял ответ. Можете ли вы прояснить, что решило вашу проблему, чтобы читатели знали? –

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