-1

所以在我的代码中,无论我改变多少,我都无法让它正常工作,它应该受到质疑。这包括扫描与一个选项相对应的 int,然后它应该现在使用声明的选项调用导航并使用它,但无论您选择什么选项,它只会说对不起

#include <stdio.h>
#include <stdlib.h>

#define OPENWINDOW "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"

void question(int option)

{
        printf("What Would You Like To Do?\n");
        printf("\t1.Add A Reminder\n\t2.View Reminders\n\t3.Manage Current Reminders\n\t4.Settings\n");
        scanf("%i", &option);

}

void navigate(int option)
{
    switch(option)
    {
        case 1:
        printf(OPENWINDOW);
        break;
        case 2:
        printf(OPENWINDOW);
        break;
        case 3:
        printf(OPENWINDOW);
        break;
        case 4:
        printf(OPENWINDOW);
        break;
        default :
        printf("sorry");
        question(option);


    }
}

int main()
{
     int option;    

     question(option);
     navigate(option);    

     return 0;
}
4

7 回答 7

2

参数是按值传递的,而不是引用。因此,您的“选项”arg 将在函数结束后不久“消失”。

如果您将“引用”传递给 var,那么您可以使用它来填充调用者变量。以下代码和示例修复了它。

void question(int *option)
{
        printf("What Would You Like To Do?\n");
        printf("\t1.Add A Reminder\n\t2.View Reminders\n\t3.Manage Current Reminders\n\t4.Settings\n");
        scanf("%i", option);
}

然后你这样称呼它:

int option;
question(&option);
// now you can use option...

由于函数可以返回值,您还可以:

int question(void)
{
        int option;
        printf("What Would You Like To Do?\n");
        printf("\t1.Add A Reminder\n\t2.View Reminders\n\t3.Manage Current Reminders\n\t4.Settings\n");
        scanf("%i", &option);
        return option;
}

// ...
int option = question();
// ...

导航和主要使用参考(指针):

void navigate(int *option)
{
    switch(*option)
    {
        case 1:
          printf(OPENWINDOW);
          break;
        case 2:
          printf(OPENWINDOW);
          break;
        case 3:
          printf(OPENWINDOW);
          break;
        case 4:
          printf(OPENWINDOW);
          break;
        default:
          printf("sorry");
          question(option);    
    }
}

int main(void)
{
     int option;    

     question(&option);
     navigate(&option);    

     return 0;
}
于 2013-06-06T06:36:11.347 回答
1

您需要通过option引用传递。将选项的地址传递给 question() 并在那里更新。

参考修改后的代码。

void question(int *option)
{
        printf("What Would You Like To Do?\n");
        printf("\t1.Add A Reminder\n\t2.View Reminders\n\t3.Manage Current Reminders\n\t4.Settings\n");
        scanf("%i", option);
}

将 question() 称为,

question(&option);
于 2013-06-06T06:33:54.567 回答
0

您正在option按值传递变量question(option)

您应该通过option引用传递变量

void question(int *option)
{
        printf("What Would You Like To Do?\n");
        printf("\t1.Add A Reminder\n\t2.View Reminders\n\t3.Manage Current Reminders\n\t4.Settings\n");
        scanf("%i", option);

}

void navigate(int *option)
{
    switch(*option)
    {
        case 1:
        printf(OPENWINDOW);
        break;
        case 2:
        printf(OPENWINDOW);
        break;
        case 3:
        printf(OPENWINDOW);
        break;
        case 4:
        printf(OPENWINDOW);
        break;
        default :
        printf("sorry");
        question(option);

}

int main()
{
     int option;    

     question(&option);
     navigate(&option);    

     return 0;
}

有关这方面的更多信息,请查看此链接引用调用和值调用之间的区别

于 2013-06-06T06:34:28.803 回答
0

您将“选项”作为按值调用传递。因此,无论您传递给 question()。会丢失。

或者,您从 question() 返回“选项”并将其传递给 navigate()。

#include <stdio.h>
#include <stdlib.h>

#define OPENWINDOW "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"

int question()
{       int option;
        printf("What Would You Like To Do?\n");
        printf("\t1.Add A Reminder\n\t2.View Reminders\n\t3.Manage Current Reminders\n\t4.Settings\n");
        scanf("%i", &option);
        return option;

}

void navigate(int option)
{
    switch(option)
    {
        case 1:
        printf(OPENWINDOW);
        break;
        case 2:
        printf(OPENWINDOW);
        break;
        case 3:
        printf(OPENWINDOW);
        break;
        case 4:
        printf(OPENWINDOW);
        break;
        default :
        printf("sorry");
        question(option);


    }
}

int main()
{
int option;

option = question();
navigate(option);

return 0;
}
~
于 2013-06-06T06:34:53.883 回答
0

您需要将指针传递optionquestion或从函数返回question

在您的情况下, in 的值optionmain()您读取时不会改变question()。将您的代码更新为

int question()

{
        int option;

        printf("What Would You Like To Do?\n");
        printf("\t1.Add A Reminder\n\t2.View Reminders\n\t3.Manage Current Reminders\n\t4.Settings\n");
        scanf("%i", &option);
        return option;
}

int main()
{
    int option;
    option = question(option);
    navigate(option);
    return 0;
}
于 2013-06-06T06:36:41.997 回答
0

如果您不想使用按引用传递,则可以使用您在代码中使用的按值传递。它只需要正确实施。您可以通过将 void 更改为“int”并在问题函数结束之前发出 return 语句来更改“void question”以返回值。检查以下代码:

#include <stdio.h>
#include <stdlib.h>

#define OPENWINDOW "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"

int question()

{
        printf("What Would You Like To Do?\n");
        printf("\t1.Add A Reminder\n\t2.View Reminders\n\t3.Manage Current Reminders\n\t4.Settings\n");
        scanf("%i", &option);
        return i;
}

void navigate(int option)
{
    switch(option)
    {
        case 1:
        printf(OPENWINDOW);
        break;
        case 2:
        printf(OPENWINDOW);
        break;
        case 3:
        printf(OPENWINDOW);
        break;
        case 4:
        printf(OPENWINDOW);
        break;
        default :
        printf("sorry");
        question(option);
    }
}

int main()
{
int option;
option = question(option);
navigate(option);

return 0;
}
于 2013-06-06T06:45:03.427 回答
0

因为变量 option 只是将它的值传递给函数 question(),变量 option 的值确实没有改变,所以,也许你应该在函数 question() 中返回 option 的值

于 2013-06-06T09:54:06.533 回答