Я беру учебный курс на «C» и сталкиваюсь с проблемой. Трудно объяснить, поэтому я отправлю код. Это тренировочный синтаксис, поэтому не спрашивайте меня, почему так оно и было. Когда оба этих блока сегмента запускаются в main(), второй блок не ведет себя так, как если бы он существовал один в main(). Я попробовал несколько IDE, думая, что это может быть ошибка.Не могу понять, почему getchar() собирает новую строку для первого появления в C
/* First Segment Block */
int c;
printf("Type a letter: ");
c = getchar();
printf("You typed '%c'\n",c);
/* OR - outputs the same, to demonstrate putchar */
printf("You typed '");
putchar(c);
printf("'\n\n");
/* Second Segment Block */
int a,b,d;
printf("Type two letters: ");
a = getchar();
b = getchar();
d = getchar();
printf("You typed '");
putchar(a);
printf("' and '");
putchar(b);
printf("' and '");
putchar(d);
printf("'\n");
Во втором сегменте блока я добавил третью переменную, чтобы проверить свою теорию. Когда вы вводите запрошенные 2 буквы, первый getchar() берет новую строку, а второй getchar() берет первую букву. Третий getchar() берет второе письмо. Если вы закомментируете весь блок первого сегмента, то он ведет себя правильно, подбирая первую букву первой getchar() и вторую букву вторым getchar(), отображая результат как ожидалось.
Вот результат, когда оба работают вместе.
Type a letter: k
You typed (k)
You typed 'k'
Type two letters: lk
You typed '
' and 'l' and 'k'
RUN SUCCESSFUL (total time: 9s)
Когда они запускаются индивидуально, выход ниже.
Первый вывод сегмента.
Type a letter: k
You typed (k)
You typed 'k'
RUN SUCCESSFUL (total time: 5s)
Второй сегментный выход.
Type two letters: rf
You typed 'r' and 'f' and '
'
RUN SUCCESSFUL (total time: 5s)
3-GetChar() является новой строки, и, как ожидается.
Может ли кто-нибудь объяснить, почему, когда оба сегмента выполняются в одном и том же main(), поведение отличается от того, когда вы выполняете раздельную работу?
Спасибо заранее, Daniel N. (C начинающий язык)
Вы нажали return после ответа на первое приглашение? Эта новая строка считывается следующим 'getchar()'. – Barmar
Когда вы набрали первую букву, вы также нажмете return, который отображается как новая строка. Второй 'getchar()' читает новую строку, а затем считываются две буквы (и во входной строке есть непрочитанная новая строка). Это ожидаемое поведение. Если бы вы набрали «abc» и вернулись, все будет вести себя так же, как вы ожидали ... кроме того, что лишние вызовы 'getchar() будут возвращаться, если вы не набрали ничего больше. –
Newline ('' \ n'') является 'char' тоже .. – chux