1

Тема: Виконання printf

Доброго дня, шановні.

Налаштувавши VS Code та MinGW на своєму ПК(Win7) маю проблему з виконанням .exe файлів, які створив.

Суть: створена програма Hello World.exe з кодом

#include <stdio.h>

int main(){

    printf("Hello World\n");
    getchar();
    
    return 0;
}

відпрацьовує на "Ура". Але ж якщо я додаю scanf і пишу щось накштал

#include <stdio.h>

int main()
{
    int a;
    printf("Input number: ");

    scanf("%d", a);

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

    sleep(30);

    return 0;
}

то, після відпрацьовування scanf і введення числа, програма закривається і не виводить змінну a як я запросив отут

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

Може в когось є якісь думки з приводу того, чому так може відбуватися?
Може я неправильно код пишу?

2

Re: Виконання printf

scanf приймає адресу, куди запхати зіскановане

scanf("%d", &a);

Натомість йому дали випадкове значення з заведеної на стеку змінної, він пише зіскановане хтозна куди і все падає.

Подякували: MisterSun, koala, leofun013

3

Re: Виконання printf

Точно! Бімба, дякую! Пропустив важливий елемент коду. Соромно *SORRY*

4

Re: Виконання printf

Це нормальна помилка на C. Взагалі scanf - небезпечна функція, якщо ви введете не число, воно впаде. Коректно якось так:

char buffer[100];
int a;
fgets(buffer, 100, stdin);
if(1==sscanf(buffer, "%d", &a)) { //sscanf, як і scanf, повертає кількість введених значень
  //вдало введене число
} else {
  //не число
}
Подякували: reverse25001