Для будущих комментариев, пожалуйста, добавьте полные сообщения об ошибках и предупреждения вашего компилятора.Однако, я думаю, проблема в том, что scanf()
Вы писали:
scanf( "%d",UserOption );
scanf()
нуждается в адресе переменной в качестве параметра.Поэтому вам нужно написать:
scanf( "%d",&UserOption );
Вот почему вы получаете сообщение об ошибке.Он ожидает указатель на целое число (чтобы изменить значение UserOption из функции scanf ()), но вы передаете UserOption в scanf ().То, что вы делаете, называется Передача по значению , но для scanf () требуется Передача по ссылке .Поскольку вы новичок в C, здесь краткое объяснение обоих принципов:
Передача по значению: Функция, которую вы вызываете, получает копию вашего переданного параметра.
int foo(int bar){
...
}
int main(void){
int x = 5;
foo(x);
...
return 0;
}
Когда вызывается foo (), копия переменной x передается в foo.Это означает, что строка переменной функции инициализируется с содержанием x, следовательно, 5.
Передача по ссылке : вызываемая вами функция получает адрес переменной.Указатели используются для сохранения адреса в C. Поэтому в строке определения функции не объявляется как указатель на int (int *) и вызывается с адресом x (& x).
int foo(int* bar){
...
}
int main(void){
int x = 5;
foo(&x);
...
return 0;
}
Когда вызывается foo (), копия адреса переменной x передается в foo.Это означает, что строка указателя функции инициализируется с адресом x.Содержимое бара теперь является адресом.Передача по ссылке используется для доступа к нефункциональным переменным из функции.Это также повышает производительность, так как вам не нужно делать отдельную копию вашего параметра.