0

これは宿題の問題です。私はCを使用しています。

月を 3 文字の文字列 (Jul、Jan、Apr...) の形式で入力しています。この入力を整数値に変換する必要があります。

m入力された s の値に基づいて設定するスイッチを使用しようとしていますchar。次のソリューションはJUN、入力された月が である場合を除き、正常に機能しています。これは 6 に変換する必要がありますが、代わりに 2 に変換されています。

char mo[] = {month[0], month[1], month[2]};  //convert the string to a char array

int m;   //declare return value

switch(mo[0]){
case 'j':
    switch(mo[2]){
    case 'n':
        switch(mo[1]){
        case 'a':
            m = 1;
            break;
        case 'u':
            m=6;
            break;
        }
    case 'l':
        m=7;
        break;
    }
case 'f':
    m=2;
    break;

なぜこれがうまくいかないのJUNですか?

4

6 に答える 6

5

ネストされた各 switch ブロックのbreak; 後に配置しませんでした。

于 2013-05-06T22:26:01.330 に答える
1

break「j」と「n」の case ブロックの最後にステートメントがありません。

switch(mo[0]){
case 'j':
    switch(mo[2]){
    case 'n':
        switch(mo[1]){
        case 'a':
            m = 1;
            break;
        case 'u':
            m=6;
            break;
        }
        break;
    case 'l':
        m=7;
        break;
    }
    break;
case 'f':
    m=2;
    break;
于 2013-05-06T22:27:11.687 に答える
0

@Elazarはすでにあなたの間違いを指摘しています。それは別の方法です:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int monthn(const char *);

int main()
{
  printf("JAN:%d,jan:%d\n",monthn("JAN"),monthn("jan"));
  return 0;
}

int monthn(const char *name)
{
  const char *months[] = { "JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC" };
  int i = 0;
  for(i = 0; i < sizeof(months)/sizeof(months[0]); i++) 
    {
      if(strcmp(months[i], name) == 0) 
      return i;
  }
  return -1;
}

この出力:

JAN:0,jan:-1
于 2013-05-06T23:19:57.990 に答える