2015-05-31 3 views
-1

Я кодирую программу на C, которая требует, чтобы пользователь вводил 3 входа. Я использую зсап, чтобы получить номера:scanf чтение больше, чем требуется

printf("Enter the first value: "); 
scanf("%lf", &eps); 

while(eps < 0){ 
    printf("Epsilon must be positive. Choose a new value: "); 
    scanf("%lf", &eps); 
} 
printf("Enter with the second value: "); 
scanf("%lf ", &A); 
while(A < 0){ 
    printf("A must be positive. Enter with a new value: "); 
    scanf("%lf", &A); 
} 

if (A != 0){ 
    printf("Enter the third value: "); 
    scanf("%lf", &w); 

    while(w < 0){ 
     printf("w must be positive. Enter with a new value: "); 
     scanf("%lf", &w); 
    } 
} 

Проблема заключается в том, когда требуется второй вход, я поставил значение и мой зсапЕ просто игнорировать его и «просит новый номер» (я имею в виду, если Я вхожу в 1, мне нужно снова ввести 1, чтобы это значение было прочитано). Я не использовал C некоторое время, но я помню, что раньше у меня была эта проблема, и я использовал что-то вроде getch() или getchar() после scanf, чтобы проблема не произошла. Что я делаю не так?

Заранее благодарен!

+1

Можете ли вы показать полный минимальный рабочий пример? Какой тип данных является eps, как он объявлен и определен? – mmoment

+0

Что это значит? Я вводил 1 для epsilon, тогда он требует значения для A, но мне нужно ввести его дважды, чтобы значение считывалось. – Giiovanna

+2

Вы должны IMO включать минимальный рабочий код и содержимое консоли при запуске программы. В противном случае любой ответ будет догадкой. –

ответ

5

Существует досадная дополнительный пробел в формате scanf здесь:

scanf("%lf ", &A); 

Это заставит зсапЕ проглотить все пробелы после номера, включая символ новой строки и пробелы в следующей строке (что означает, что он будет настаивать на чтении другой строки.)

Удалите пространство, и оно должно работать нормально.

4

Вот ваша проблема:

scanf("%lf ", &A); 
     // ^-------- This space 

Цитирование POSIX:

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

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

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