2016-12-21 10 views
2

Сценарий 1C При выполнении файла C в терминале, как я могу добавить разрыв строки для ввода при запросе с помощью fgets() или scanf()?

char string[MAX_BYTES] = "This is a string\nthat I'm using\nfor scenario 1"; 

Сценарий 2

printf("Enter string: "); 
fgets(string, MAX_BYTES, stdin); 

Если я обеспечиваю строку в-кода (Сцен. 1), я могу разрыв строки с '\n'.

Но если запрос в терминале fgets() или scanf() (сценарий 2), нажатие enter продолжает выполнение кода.

Как добавить разрыв строки для ввода без запуска остальной части кода?

+1

Вы можете вызвать 'fgets()' в цикле, объединив ввод в строку результата. – Barmar

ответ

4

Обычно это не может быть сделано с fgets и scanf, но вы можете использовать вместо getchar:

int ch; 
int idx = 0; 
while(((ch = getchar()) != EOF) && idx < MAX_BYTES) 
{ 
    string[idx++] = ch; 
} 
printf("%s", string); 

Примечание getchar будет принимать любой входной сигнал, содержащий \n и цикл while заканчивается, когда EOF т.е. Ctrl + D от stdin. Затем вы копируете каждый символ в буфер соответственно.

+0

Отлично! Спасибо. Итак, в общем случае должен использоваться цикл 'getchar()' при приеме ввода терминала? Какими сценариями являются 'fgets()' и/или 'scanf()' лучше использовать? – dbconfession

+0

'scanf' для форматированного ввода (int, double и т. Д.),' Fgets' предназначен для ввода строки, 'getchar' предназначен для простого ввода символов. Обычно 'scanf',' fgets' превосходят, но 'getchar' имеет свои собственные варианты использования – artm

+0

Так что в общем случае, если я хочу использовать линейный ввод, я использую' fgets() '. Я бы использовал только 'scanf()', есть ли отформатированный вход (числа, десятичные числа и т. Д.) Правильно? – dbconfession

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

  • Нет связанных вопросов^_^