2015-09-09 35 views
3

我一直在尝试“给定月份有多少天”。错误的字符串传递给函数时

main看起来是这样的:

int main(void) { 
    int numberOfDays, month = 0; 
    char* input = (char*) malloc(10); 

    printf("Please enter a month (\"1\", \"Jan\", \"January\", \"jan\" or \"january\" etc.):\n> "); 
    scanf(" %s", input); 
    selectMonth(input); 

    switch (month) { 
     case 1: 
      numberOfDays = 31; break; 
     ... 
     default: 
      numberOfDays = 0; 
      printf("Invalid month.\n"); 
    } 
... 

而且selectMonth

int selectMonth(char* input) { 
    int month = 0; 

    if (!strcasecmp(input, "jan") || !strcasecmp(input, "january") || !strcasecmp(input, "1")) { 
     month = 1; 
    } 
    ... 

    return month; 
} 

当我把selectMonth里面的内容main,它工作正常。但是当我为else/ifs有一个单独的函数并返回该月份时,交换机会直接转到默认情况。 这是为什么?

我很感激任何帮助!

回答

9
selectMonth(input); 

表达式的结果没有被分配到month ...所以:

month = selectMonth(input); 

将协助您解决问题forementioned。

记住,C具有局部范围变量,让你里面selectMonth声明month相同month作为一个在main()声明。因此,main()中的那个从来没有得到除零之外的任何值,它是用它初始化的。

+0

很快!非常感谢,我根本没有注意到!当我能够在10分钟内完成时,我会标记你的答案!谢谢! :) – jmkjaer

+1

@Dradee:没问题!在这里评论,如果你有任何其他相关的问题:)。 – 3442