#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, так как я получаю вывод на экран из printf, когда я комментирую оператор scanf:
Это конфигурация с 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
(anint*
)scanf
кому .5. и наоборот,
printf("Great! You entered %d.n", *iVar);
с добавлением косвенности