#c #visual-studio-code
Вопрос:
Итак, в принципе, у меня есть эта простая программа Hello World, и при выполнении она выводится правильно.
#include lt;stdio.hgt; int main(){ printf("Hello"); }
Output: Hello
Но по какой-то причине добавление команды scanf приведет к тому, что программа ничего не выведет. Он покажет, что он запущен, но ничего не отобразит.
#include lt;stdio.hgt; int num1; int main(){ printf("Enter number: n"); scanf("%d", amp;num1); printf("%d", num1); }
Выход:
[Running] cd "d:programming" amp;amp; gcc main.c -o main amp;amp; "d:programming"main
Я знаю, что мой код в порядке, так как я пробовал его на других IDE, и он работал правильно. Я даже скопировал код из Интернета и попытался запустить его в VSCode, но это все равно не сработало. Вчера он все еще отлично работал, но эта проблема просто возникла из ниоткуда.
Я использую код Visual Studio 1.62.3 с расширениями компиляции C/C , C/C и Code Runner.
Ответ №1:
Это проблема с буферизацией. Когда стандартный вывод ( stdout
, где printf
выполняется запись) подключен к фактическому терминалу, он буферизован по строкам, что означает, что вывод фактически записывается в терминал, когда появляется новая строка.
Однако VSCode, вероятно, использует свою собственную эмуляцию терминала и использует каналы для подключения stdout
к этому терминалу. Это означает, что выходные данные будут полностью буферизованы, и вам необходимо явно очистить их.
Поэтому измените код как таковой:
printf("Enter number: n"); fflush(stdout); // Actually write the output to standard output scanf("%d", amp;num1); printf("%d", num1);
То, что это работает в первом примере, объясняется тем, что затем процесс завершается, и все выходные данные автоматически сбрасываются.
Комментарии:
1. Это сработало, спасибо! @Какой-то чувак-программист, хотя я не включал это
fflush(stdout);
раньше, и это все еще работает. По какой-то причине эта проблема возникла совсем недавно. Нужно ли мне вставлять это только один раз?