C程序中switch语句的意外输出

时间:2018-10-21 13:41:43

标签: c

当我输入a - 0000520时我得到a的输出,而根据分配的代码我应该得到0001010。同样,由于无法解释的原因,默认值每次都会运行(使用printf语句进行测试)。我的代码在这里:

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

int splitWord(char* word, int count);
int sunCode(char letter);

int main()
{
    char inputString[100];
    char splitStrings[10][10];
    int i, j, count;

    printf("Enter the message.\n");
    fgets(inputString, 100, stdin);
    j = count = 0;
    for (i = 0; i <= (strlen(inputString)); i++) {
        if (inputString[i] == ' ' || inputString[i] == '\0') {
            splitStrings[count][j] = '\0';
            count++;
            j = 0;
        }
        else {
            splitStrings[count][j] = inputString[i];
            j++;
        }
    }
    printf("\nOriginal String is: %s\n", inputString);
    for (i = 0; i < count; i++) {
        /*for(j=0;j<=strlen(splitStrings[i]);j++){
            printf("%s",splitStrings[i][j]);
        }*/
        splitWord(splitStrings[i], count);
    }
    return 0;
}

int splitWord(char* word, int count)
{
    int i;
    int strLength = strlen(word);
    for (i = 0; i <= strLength; i++) {
        sunCode(word[i]);
        //        printf("%c\n",word[i]);
    }
    return 0;
}

int sunCode(char letter)
{
    char letr = tolower(letter);
    int code = 0;
    switch (letr) {
    case '0':
        code = 0000000;
        break;
    case '1':
        code = 0000001;
        break;
    case '2':
        code = 0000010;
        break;
    case '3':
        code = 0000011;
        break;
    case '4':
        code = 0000100;
        break;
    case '5':
        code = 0000101;
        break;
    case '6':
        code = 0000110;
        break;
    case '7':
        code = 0000111;
        break;
    case '8':
        code = 0001000;
        break;
    case '9':
        code = 0001001;
        break;
    case 'a':
        code = 0001010;
        break;
    case 'b':
        code = 0001011;
        break;
    case 'c':
        code = 0001100;
        break;
    case 'd':
        code = 0001101;
        break;
    case 'e':
        code = 0001110;
        break;
    case 'f':
        code = 0001111;
        break;
    case 'g':
        code = 0010000;
        break;
    case 'h':
        code = 0010001;
        break;
    case 'i':
        code = 0010010;
        break;
    case 'j':
        code = 0010011;
        break;
    case 'k':
        code = 0010100;
        break;
    case 'l':
        code = 0010101;
        break;
    case 'm':
        code = 0010110;
        break;
    case 'n':
        code = 0010111;
        break;
    case 'o':
        code = 0011000;
        break;
    case 'p':
        code = 0011001;
        break;
    case 'q':
        code = 0011010;
        break;
    case 'r':
        code = 0011011;
        break;
    case 's':
        code = 0011100;
        break;
    case 't':
        code = 0011101;
        break;
    case 'u':
        code = 0011110;
        break;
    case 'v':
        code = 0011111;
        break;
    case 'w':
        code = -010000;
        break;
    case 'x':
        code = 010001;
        break;
    case 'y':
        code = 010010;
        break;
    case 'z':
        code = 010011;
        break;
    case ' ':
        code = 45;
        printf("\nis space\n");
        break;
    default:
        break;
    }
    printf("%c - %07d\n", letr, code);
}

我试图查看它是否提供ASCII值(不是) 该字母已在sunCode函数中正确传递(是) 我不明白为什么会这样,也验证了switch的语法和条件。

我正在Ubuntu上使用gcc 7.3.0。

1 个答案:

答案 0 :(得分:3)

  

前导零表示该数字以八进制或以8为底;因此,010 = 8。   https://stackoverflow.com/a/1661378/10479742

八进制的

0001010十进制的520,这就是为什么要得到该结果的原因。要么删除前导零,要么将code更改为字符串。