Программа C в коде VS ничего не выводит, как только я добавляю одну функцию scanf

#c #visual-studio-code #scanf

#c #visual-studio-код #сканф

Вопрос:

Я новичок в языке Си и немного практикую его.

У меня есть очень маленькая программа, в которой я просто динамически выделяю место в памяти для переменной int.

 #include lt;stdio.hgt; #include lt;stdlib.hgt;  int main(){    int *iVar;   iVar = (int*)malloc(sizeof(int));  printf("now, input an interger value.");  scanf("%d", amp;iVar);   printf("Great! You entered %d.n", iVar);   free(iVar);   return 0; }  

Когда я запускаю это в веб-компиляторе, это работает: код из онлайн-компилятора

но в VSCode он вообще не отображает никаких выходных данных при запуске. Вывод, когда строка scanf остается незафиксированной в VSCode

Я сузил это до проблемы с оператором scanf, так как я получаю вывод на экран из printf, когда я комментирую оператор scanf: Выводится, когда строка scanf закомментирована в VSCode

Это конфигурация с VSCode? Должен ли я использовать другую среду разработки? Прямо сейчас я не совсем уверен, что мне делать.

Редактировать: Я знаю, что фрагмент кода из веб-браузера, на котором я запустил этот код, пропускает символamp;, но он все равно успешно выполнен. Что вызвало у меня еще несколько вопросов — но я все еще использую amp;iVar в VSCode. Забавно, что ввод amp;iVar в веб-браузере привел к неправильному вводу….хотя я убежден, что это правильный способ написания этих утверждений? Я не знаю.

Комментарии:

1. Код, который вы публикуете, и код, который вы показываете в веб-компиляторе, не совпадают. Откройте PROBLEMS вкладку и прочитайте предупреждения.

2. Затем используйте лучший компилятор или лучшие флаги компилятора ( -Wall -Werror ), потому что это определенно должно предупредить вас о передаче int ** scanf кому . Но просто внимательно посмотрите на исходный код, который отличается от скриншотов и кода, который вы опубликовали здесь.

3. Просто не размещайте здесь фотографии кода вообще. Если вы публикуете код, который вы компилируете, или компилируете код, который вы публикуете, у вас возникает более последовательный вопрос.

4. Спецификатор "%d" формата для scanf ожидает int* . iVar есть ан int* , так и должно быть scanf("%d", iVar); . Если бы у вас было int iVar; , то вы бы сделали scanf("%d", amp;iVar); , что передает адрес iVar (an int* ) scanf кому .

5. и наоборот, printf("Great! You entered %d.n", *iVar); с добавлением косвенности