Мне нужно динамически вводить целочисленный ввод и завершать его, как только пользователь нажимает ввод. У меня никогда не было проблем с этим, когда я брал символы в качестве входных данных, поскольку я могу легко проверить наличие новых строк, и каждый символ представляет собой один символ. Но здесь я не могу просто взять ввод char и вычесть его на «0», так как когда я ввожу 10, значение char равно 1, а затем 0.
Вот кусок кода, который я использую:
int no;
while (scanf_s(" %d", &no) == 1)
{
printf("%d ", no);
}
И вот еще один фрагмент кода, который я использую для ввода символов, он отлично работает и для однозначных целых чисел:
char no;
while ((no=getchar()) != EOF && no != '\n')
{
printf(" %d ", no - '0');
}
Цикл scanf не завершается при нажатии клавиши ввода, но он правильно принимает все входные данные. Принимая во внимание, что цикл getchar завершается правильно, но сохраняет только однозначные целые числа.
Как я могу завершить ввод целых чисел при вводе пустой строки пользователем?
scanf
. Он определяется с точки зрения потокового ввода; у него нет понятия линий. Если вы хотите прочитать и интерпретировать строки ввода, используйтеfgets
для чтения строк как строк, а затем обработайте строки. (При этом вы также избежите множества других трудностейscanf
.) - person Steve Summit   schedule 07.08.2019%d
сscanf
, это означает, что вы пропускаете начальные пробелы, а затем читаете целое число, состоящее из одной или нескольких цифр. Невозможно отключить пропуск ведущей части пробела, что и вызывает вашу проблему. - person Steve Summit   schedule 07.08.2019scanf
), это изменить подсказку с Ввод чисел, заканчивающихся пустой строкой, на Ввод чисел, заканчивающихся любым нечисловым символом. Если пользователь вводитx
или что-то подобное, это приведет к ошибкеscanf
и возврату 0. - person Steve Summit   schedule 07.08.2019