Базовая программа меню на C

#c #function

#c #функция

Вопрос:

Я пытаюсь создать простую программу на C, которая выводит меню опций, и когда опция выбрана и задача выполнена, пользователь перенаправляется обратно в главное меню. Я продолжаю получать сообщение об ошибке «тире: 2: 1: не найдено». Каждая опция представляет собой отдельную функцию и выбирается оператором switch. Я попытался добавить цикл while, объявляя функцию по-разному, но я продолжаю получать ту же ошибку.

 #include <stdio.h>
int power(int a, int n){
    int s = 1;
    scanf("%d", amp;a);
    scanf("%d", amp;n);
    while (n != 0) {
        s *= a;
        --n;
}
return ("Answer = %d", s);

}

int main()
{
int a, n, op;
printf("nnnMenu: n");
printf("Option 1: a**nn");
printf("Option 2: Is a in n?n");
printf("Option 3: How many times is a written in n?n");
printf("Option 4: Is n a prime number?n");
printf("Option 5: nth number of Fibonacci sequencen");
printf("Option 6: Max a in Fibonacci sequence that is less than nn");
printf("Option 7: Min a in Fibonacci sequence that is greater than nn");
switch(op){
    case 1: power(a,n); break;
}
}
 

Любые предложения будут с благодарностью приняты.

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

1. это возвращает… вы должны вернуть значение int… может быть, вы хотели вызвать printf вместо return ? Кроме того … вы не читаете никаких входных данных от пользователя, переменная op содержит случайное значение

2. dash: 2: 1: не найдено … Гм … вы загружаете программу на C в оболочку вместо ее компиляции?

3. Большое спасибо, добавление необходимого пользовательского ввода сделало свое дело. Я просто новичок в концепции функций и еще не все понимаю.

4. Это не тот вопрос, который вы задаете, но это будет работать не так, как вы хотите, потому что a и n передаются по значению. Таким образом, amp;a (и amp;n) внутри power() будут ссылаться на адрес копии a (и n), хранящейся локально во фрейме стека power(), а не на то, что может видеть main(). Вы должны переписать power(), чтобы принимать указатели в качестве аргументов, а затем передать ему указатели на a и n в main (и соответствующим образом настроить свои вызовы scanf() — поскольку a и n в power() уже являются указателями, вы можете передавать их непосредственно в scanf() без необходимости приниматьих адрес — который даст вам указатель на указатель).