定义返回稍后在主程序中使用的char的函数

时间:2014-12-03 20:45:44

标签: c function parameters return-value command-line-arguments

我在调用函数时遇到了很多麻烦,并且稍后再次在主程序中使用它们。我没有找到答案深入解释为什么这不会运行。我知道参数属于被调用的函数括号内,但我希望用户输入在被调用的程序中开始。这甚至可能吗?从理论上讲,该函数会询问用户一年,检查它是否在某些参数范围内,然后将其返回到main函数,我希望最终能够将它存储在数组中。现在,有人可以告诉我如何在这个基础课程中完成这项工作吗?提前谢谢!

#include <stdio.h>

char year_info();

int main(void)
{
    int menu_selection;
    char year;

    printf("Please choose from the following menu: \n1. Insert a new movie\n2. Show movie\n3. List all\n4. Exit\n");
    scanf("%i", &menu_selection);
    switch (menu_selection)
    {
        case 1: year = year_info();
                printf("%c", year);
                break;
    }
}

char year_info()
{
    int year_input;
    printf("\nYear: ");
    scanf("%i", &year_input);
    if (year_input > 2016 || year_input < 1920)
    {
        printf("Sorry, I do not recognize this command. Please try again.\n");
    } 
    else
    {
        int year = year_input;
        return year;
    }
}

2 个答案:

答案 0 :(得分:1)

它没有运行,因为你传递了scanf变量,但你应该传递变量的地址,即使用:

scanf("%i", &something);

而不是scanf("%i", something);


另外,正如其他人所指出的那样,你过于宽松地混合charint,所以它不会像预期的那样工作。

yearyear_imput无法成为字符,因为他们不会保留足够大的值,您至少需要短片。

答案 1 :(得分:0)

你有2个错误。

scanf("%i", &menu_selection);


scanf("%i", &year_imput);

你需要使用&amp;将变量的地址传递给scanf()

编辑:但是,我会使用一个整数,因为scanf("%c", &something)只会识别您输入的第一个字符,而不是整个字符串,即使发生了这种情况不能在字符串之间做if (year_imput > 2016 || year_imput < 1920),你可以用字符做,但同样,他们只能存储一个字符,所以我会像你这样完成你的程序。

#include <stdio.h>

int year_info();

int main() {
    int menu_selection;
    int year;

    printf("Please choose from the following menu: \n1. Insert a new movie\n2. Show movie\n3. List all\n4. Exit\n");
    scanf("%i", &menu_selection);

    switch (menu_selection) {
        case 1:
                year = year_info();
                printf("%i", year);
                break;
        default:
                break;
    }

    return 0;
}

int year_info() {
    int year_imput;
    printf("\nYear: ");
    scanf("%i", &year_imput);

    if (year_imput > 2016 || year_imput < 1920) {
        printf("Sorry, I do not recognize this command. Please try again.\n");
        return 0;
    }
    else
        return year_imput;
}