Это не имеет ничего общего с глобальными переменными.Здесь есть несколько проблем, но самая неотложная ошибка заключается в том, что вы пытаетесь использовать неинициализированные указатели. Это никогда не работает .Вы должны понимать указатели, прежде чем сможете их правильно использовать.
В частности, если у вас есть такое объявление:
int *x;
Тогда, независимо от того, что вы делаете , вам сначала нужно назначить действительный указатель на x
1 .
В вашем случае ошибка усугубляется тем, что вы используете scanf
неправильно.К счастью, решение здесь очень простое: не объявляйте указатели.Вместо этого объявите int
переменные.
#include <stdio.h>
int q;
int u;
int p;
void test () {
printf("Insert #1?\t"); scanf("%d", &u);
printf("Insert #2?\t"); scanf("%d", &p);
}
int main () {
test();
printf("%d\n", u);
printf("%d\n", p);
printf("%d\n", q);
}
По иронии судьбы комментарии в исходном коде уже указывают на проблему, они просто предлагают неправильное решение.Это немного загадка, откуда эти комментарии.; -)
1 Технически единственным исключением являются статически размещенные указатели, которые правильно инициализируются нулями и поэтому могут использоваться при сравнении нулевых указателей.