2016-12-03 3 views
0

Я программирую на C, и у меня проблема, когда я запускаю программу в терминале cmd. вот код, который я использую:Чтение ввода с помощью scanf зависает

#include <stdio.h> 

int main() { 

    int num; 

    printf("enter a number: "); 
    scanf("%i\n", &num); 

    for(int n = 1; n < num + 1; n++){ 
     printf("%i\n", n); 
    } 


    return 0; 
} 

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

Это скриншот того, как он выглядит. здесь введите номер (и нажмите клавишу ввода), но ничего не происходит: http://prntscr.com/deum9a

и это, как он выглядит, как после того, как я вошел что-то случайное НАД все числа выскочил: http://prntscr.com/deumyn

если кто-нибудь знает, как исправить это, скажите, пожалуйста (:

+0

зсапЕ будет в исполнение до ввода не будет нажата клавиша. Вы нажимаете клавишу ввода сразу после ввода номера? Если да, то что показывает консоль? Если нет, то это работает именно так. –

ответ

4

Удалить \n из scanf()

scanf("%i", &num); 

Если у вас есть символ пробела в формате string, scanf() будет игнорировать любое количество введенных вами whites-пространств, и, таким образом, ENTER, который вы делаете, не прерывает чтение ввода. В принципе, вы будете вынуждены снова ввести символ пробела , чтобы завершить звонок scanf().

Как правило, scanf() считается плохой для ввода данных. Итак, учитывая использование fgets() и разбор входных данных с помощью sscanf().

См: Why does everyone say not to use scanf? What should I use instead?

+0

спасибо! и плохо искать другие методы ввода (: –

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