Помогите Пока Цикл в C - PullRequest
       195

Помогите Пока Цикл в C

0 голосов
/ 20 сентября 2009

Я новичок в программировании на C, пришел из Java. Мне было интересно, почему в следующем коде, в цикле while я должен ввести свой ввод десять раз, а затем отобразятся все десять вводов. Я пытаюсь напечатать что-то один раз, и сразу после этого. Затем продолжайте вводить другие мои данные.

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


main(){

print(PROGRAM_INFO); //prints program name and author
print(PROMPT);

char input [100]; //array to hold input from user
int isActive = 1; //1 continue shell, 0 terminate shell
int count = 0;

while (isActive == 1 && count < 10){
    print(PROMPT);
    ++count;
    scanf("%s", input);
    print(input);


}


}

Ответы [ 6 ]

5 голосов
/ 20 сентября 2009

Попробуйте смывать fflush(stdout) после каждого print(input)

1 голос
/ 20 сентября 2009

по умолчанию ввод / вывод буферизуется, т. Е. Входные и выходные байты сохраняются в байтовом массиве перед отображением в потоке.
BUFSIZ в системах обычно кратен 1024. Хотя printf является буферизованной строкой, буфер сбрасывается автоматически при обнаружении новой строки.
fflush (stdout) вызывает сброс буферизованных данных в выходной поток, который в этом случае является stdout. Вы можете управлять обработкой буфера, используя setvbuf () function

1 голос
/ 20 сентября 2009

Вам необходимо сбросить STDOUT. fflush(STDOUT) должен сделать это, добавлено после печати. ​​

1 голос
/ 20 сентября 2009

после вашего последнего оператора печати вы, вероятно, могли бы вызвать fflush (stdout); вывести стандартный вывод на экран.

1 голос
/ 20 сентября 2009

Попробуйте вставить символ '\ n' в печать. Поток просто не очищается.

0 голосов
/ 20 сентября 2009

Ваш print является ошибкой копирования / вставки, верно? Это должно быть printf.

И вам действительно не следует печатать пользовательскую строку непосредственно в формате printf.
Представьте, что пользователь вводит "%d%f%s\a%c" ...

Лучше всего сделать

printf("%s\n", input);

С форматом '\ n' вам не нужно fflush(stdout);, потому что stdout является буферизованной строкой по умолчанию, а \ n 'делает это самостоятельно.

Кроме того, если пользователь печатает "%d%f%s\a%c", это то, что вы печатаете.


Лучшее, что можно сделать, это

puts(input);

Put добавляет '\ n' к выводу и не имеет проблем со строками формата.

...