2014-12-03 24 views
-1

我有很多的麻烦缠绕我的头周围调用函数并在主程序使用它们以后再次使用的字符功能。我还没有找到答案深入解释为什么这不会运行。我知道参数属于被调用的函数括号内,但我希望用户输入在被调用的程序中开始。这甚至有可能吗?理论上,函数会询问用户一年,检查它是否在某些参数内,然后将其返回到主函数,我希望最终能够将其存储在数组中。现在,有人能告诉我如何在这个初级项目中完成这项工作吗?先谢谢你!定义返回后在主程序

#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; 
    } 
} 
+1

'char'(通常)是一个8位整数。根据编译器的不同,它可以从-128到127,或从0到255的值。['scanf'](http://en.cppreference.com/w/c/io/fscanf)格式'“%i “'读入一个'int'变量,'int'通常是* 32 *位宽,从负二十亿增加到二十亿。当然,你可以看到一些问题,试图将一个或两个千分之一的值放入一个不能保持这个大值的变量中。 – 2014-12-03 20:48:54

+0

'炭year_info();' - >'INT year_info();','炭year_imput;' - >'INT year_imput;','的scanf( “%i” 的,year_imput);' - >'的scanf (“%i”,&year_imput);'并且有一个不返回值的路径。 – BLUEPIXY 2014-12-03 20:50:39

+0

那么我应该使用%d吗? – 2014-12-03 20:50:57

回答

1

它不运行因为你传递scanf变量,但你应该通过变量的地址,即使用:

scanf("%i", &something); 

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


而且,也有人指出,你混合charint到慷慨,所以它不会按预期工作。

yearyear_imput不能是字符,因为它们不会保持足够大的值,所以至少需要一个short。

0

您有2个错误。

scanf("%i", &menu_selection); 


scanf("%i", &year_imput); 

您需要使用&的变量的地址传递给scanf()

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

#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; 
} 
+0

我需要将年份存储为字符,并最终将它们放入数组中。这个程序如何工作?函数的返回类型是char,然后在程序的“else”部分将int转换为char? – 2014-12-03 21:09:14

+1

然后,您应该将年份存储为[String](http://www.tutorialspoint.com/cprogramming/c_strings.htm),它基本上是一个字符数组。 – OiciTrap 2014-12-03 21:16:46

相关问题