2015-08-31 3 views
0

Я должен был написать программу, чтобы она печатала количество звезд. ПримерНе удалось прочитать последнее значение в коде

Введите цифры: 12 11 9 8 ^ D

12 | ************
11 | ***********
9 | *********
8 | ********

#include <stdio.h> 

int main(int argc, char *argv[]) { 
int a; 
printf("enter values \n"); 

while (scanf("%d ", &a) != EOF) { 

    printf("%d |", a); 

    for (int j = 1; j<= a; j++) { 
     printf("*"); 
    } 
    printf("\n"); 
} 

}

С моим кодом он печатает правильный вывод, но он не печатает из числа звезд для последнего значения вхожу. Как и в вышеприведенном примере, он не будет печатать 8 звезд, пока я не нажму на вход снова или не нажму^D. Мне было интересно, есть ли что-то неправильно с моим кодом. ?

+0

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

+0

Вы должны взглянуть на это сначала ... http://stackoverflow.com/questions/1516122/how-to-capture-controld-signal –

+0

Попробуйте 'scanf ("% d ", & a)' вместо ' scanf ("% d", & a) ' –

ответ

0

Нет ничего страшного в вашем коде.

stdin буферизирован в строке, поэтому ввод не может быть прочитан, пока вы не нажмете или (= ctrl-d в Linux).

Существуют библиотеки, такие как conio.h, которые обеспечивают небуферизованный вход.

+0

Но не следует ли печатать их, когда я нажимаю enter. ?? Он не печатает последний, пока я не нажму cntrl + D –

+0

'stdout' обычно буферизуется при подключении к терминалу, поэтому' printf ("\ n"); 'должен очищать вывод на экране. Вы можете попробовать добавить 'fflush (stdout);' программно очистить выходной буфер. –

0

Снять заднее пространство после %d внутри scanf("%d ", &a)).

#include <stdio.h> 

int main(int argc, char *argv[]) { 
    int a; 
    printf("enter values \n"); 

    while (scanf("%d", &a) != EOF) { 

     printf("%d |", a); 

     for (int j = 1; j<= a; j++) { 
      printf("*"); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 
Смежные вопросы