Я просто хочу предварять этот запрос признанием того, что большинство людей презрительно относятся к функции scanf
в C. (Я видел много мест, которые категорически не рекомендуют использовать эту функцию). Однако книга, которую я читаю (C Программирование: современный подход ), в значительной степени полагается на эту функцию как минимум на первых 250 страницах. С этим отказом от ответственности ...
Я использую операционную систему Windows 10 (что, как я думаю, может иметь отношение к этому вопросу, основываясь на некоторых литературных поисках, через которые я прошел перед написанием этого вопроса).
Мне интересно понять разницу между возвратом каретки \r
, переводом новой строки \n
и клавишей Enter в контексте того, как они взаимодействовать с scanf
. Я хочу сосредоточить внимание на следующем фрагменте кода:
#include<stdio.h>
int main()
{
int N = 3;
int b[N];
int i;
printf("Enter %d numbers: ", N);
for (i=0; i < N; i++)
scanf("%d", &b[i]);
printf("The recorded input stream was ");
for (i=0; i < N ; i++)
printf("%d ",b[i]);
return 0;
}
После компиляции (с использованием gcc
) и запуска кода (в командной строке) пользователю предлагается ввести 3 числа. Теперь рассмотрим следующие четыре возможных записи:
1
Введите 2
Введите 3
Введите 1 2 3 4 5 6 7 8
Введите 1 \n 2 \n 3
Введите 1 \r 2 \r 3
Введите
Выходы для каждого вышеуказанного случая следующие:
The recorded input stream was 1 2 3
The recorded input stream was 1 2 3
The recorded input stream was 1 4199520 1956891840
The recorded input stream was 1 4199520 1956891840
Не могли бы вы объяснить эти 4 случая? (У меня есть некоторые догадки, но я бы лучше услышал точный механизм, чем публиковал свою спекулятивную чушь). Спасибо!