2015-09-09 40 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