Как на Си ввести массив чисел до перехода на новую строку
Числа вводятся через пробел. Как сделать так, чтобы ввод завершился при нажатии энтера?
Пишу while (scanf("%d", c[j]) ==1), но идет бесконечно.
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Вам нужна функция skip_spaces, которая пропускает пробельные символы из входного потока. Если встретился перевод строки, она возвращает ложь. Пример использования ниже:
#include <ctype.h>
#include <stdbool.h>
#include <stdio.h>
bool skip_spaces() {
for (; ; ) {
int c = getc(stdin);
if (c == EOF) {
return false;
}
if (!isspace(c)) {
ungetc(c, stdin);
return true;
}
if (c == '\n' || c == '\r') {
ungetc(c, stdin);
return false;
}
}
}
int main() {
const int n = 40;
int a[n];
int j = 0;
while (j < n && skip_spaces() && scanf("%d", &a[j]) == 1) {
++j;
}
printf("====\n");
for (int i = 0; i < j; ++i) {
printf("%d: %d\n", i, a[i]);
}
printf("====\n");
}
$ gcc -std=c11 -pedantic -Wall -Wextra -Werror temp.c $ ./a.out 1 2 3 ==== 0: 1 1: 2 2: 3 ====
P.S. skip_spaces не забирает из входного потока найденный перевод строки. Если вы переделаете этот пример для чтения из нескольких строк, то обнаружите, что дальше первой строки чтение не идёт. Напишите сами функцию skip_eol по аналогии чтобы решить эту проблему.