2015-09-09 2 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); 

Поможет решить ваши вопросы, вышеупомянутые.

Помните, что C имеет локальные переменные области видимости, поэтому month, что вы объявляете внутри selectMonth является не то же month как один объявленный в main(). Таким образом, тот, который находится в main(), никогда не получает никакого значения, отличного от нуля, с которого он был инициализирован.

+0

Это было быстро! Большое спасибо, я этого не замечал! Я отмечу ваш ответ, когда смогу через 10 минут! Спасибо! :) – jmkjaer

+1

@Dradee: Без проблем! Прокомментируйте здесь, если у вас есть другие связанные проблемы :). – 3442

Смежные вопросы