Как scanf взаимодействует с символом возврата каретки, символом перевода строки и кнопкой Enter в ОС Windows 10 - PullRequest
0 голосов
/ 20 июня 2020

Я просто хочу предварять этот запрос признанием того, что большинство людей презрительно относятся к функции 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. 1 Введите 2 Введите 3 Введите
  2. 1 2 3 4 5 6 7 8 Введите
  3. 1 \n 2 \n 3 Введите
  4. 1 \r 2 \r 3 Введите

Выходы для каждого вышеуказанного случая следующие:

  1. The recorded input stream was 1 2 3
  2. The recorded input stream was 1 2 3
  3. The recorded input stream was 1 4199520 1956891840
  4. The recorded input stream was 1 4199520 1956891840

Не могли бы вы объяснить эти 4 случая? (У меня есть некоторые догадки, но я бы лучше услышал точный механизм, чем публиковал свою спекулятивную чушь). Спасибо!

...