Неожиданное поведение консоли eclipse для языка C - PullRequest
0 голосов
/ 26 мая 2020

Я учусь программировать, и теперь я сосредотачиваюсь на языке C. Недавно я купил курс по этому поводу, и учитель использовал среду разработки Eclipse. Сначала у меня были некоторые проблемы с запуском кода, но они были решены с помощью небольшого исследования, но когда я попробовал что-то простое, например, поставить printf () перед scanf (), все сработало не так, как задумано, scanf () выполняется перед printf (), который предшествует ему , как вы видите:

Eclipse console behavior

Затем я попытался запустить код на windows cmd, написав в блокноте, скомпилировав с помощью g cc и запустив его по запросу, и он работал как задумано:

code behavior on cmd

После этого я попытался запустить код в другой среде IDE , Code Blocks, и результат был таким же, как при запуске на cmd, он работал так, как задумано:

Code Blocks behavior

Теперь, чтобы прояснить, я знаю, что fflu sh (стандартный вывод); команда работает, если я вставляю ее перед scanf () и что она связана с буфером (что я еще не понял должным образом), но я не понимаю, почему проблема существует в Eclipse, но этого не происходит в другие платформы . Мой учитель объяснил, что это связано с тем, что windows является домашней c ОС и проблематично c с профессиональными инструментами, такими как Eclipse. Но все же для меня это не имеет смысла, один и тот же код в одной ОС работает в IDE и не работает в другой. Очень проблематично c написать невидимый код на таком базовом c уровне, совершенно невозможно доверять какому-либо результату или выучить язык должным образом таким образом. Может ли кто-нибудь помочь мне с этим?

Я оставлю код здесь, но, как я уже сказал, это очень-очень просто, просто чтобы проиллюстрировать проблему:

#include <stdio.h>

int main() {

    int n;

    printf("Type an integer: ");
    fflush(stdout);
    scanf(" %d", &n);

    printf("\nNumber = %d\n\n", n);

return 0;
}

1 Ответ

0 голосов
/ 27 мая 2020

Буферизация не всегда выполняется последовательно в разных системах. Попробуйте это с настройкой Eclipse. Он должен установить stdout без буферизации.

#include <stdio.h>

int main() {
  setvbuf(stdout, NULL, _IONBF, 0); // stdout as no bufferring
  int n;

  printf("Type an integer: ");
  fflush(stdout);
  scanf(" %d", &n);

  printf("\nNumber = %d\n\n", n);
  return 0;
}

Вот ссылка для сборки и запуска кода.

...