3

01-99 を単語で印刷しようとしていますが、ある程度成功しています。

ソースコードは次のとおりです。

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

int main(int argc, char *argv[]) {
    char a, b;
    char *digit1;
    char *digit2;

    // get digit character by character
    scanf("%c%c", &a, &b);

    switch(a) {
        case '1':
            switch(b) {
                case '0':
                    digit1 = "ten";
                    break;

                case '1':
                    digit1 = "eleven";
                    break;

                case '2':
                    digit1 = "twelve";
                    break;

                case '3':
                    digit1 = "thirteen";
                    break;

                case '4':
                    digit1 = "fourteen";
                    break;

                case '5':
                    digit1 = "fifteen";
                    break;

                case '6':
                    digit1 = "sixteen";
                    break;

                case '7':
                    digit1 = "seventeen";
                    break;

                case '8':
                    digit1 = "eighteen";
                    break;

                case '9':
                    digit1 = "nineteen";
                    break;

                default:
                    digit1 = "";
                    break;
            }
            break;

        case '2':
            digit1 = "twenty-";
            break;

        case '3':
            digit1 = "thirty-";
            break;

        case '4':
            digit1 = "forty-";
            break;

        case '5':
            digit1 = "fifty-";
            break;

        case '6':
            digit1 = "sixty-";
            break;

        case '7':
            digit1 = "seventy-";
            break;

        case '8':
            digit1 = "eighty-";
            break;

        case '9':
            digit1 = "ninty-";
            break;

        default:
            digit1 = "";
    }

    switch(b) {
        case '1':
            digit2 = "one";
            break;

        case '2':
            digit2 = "two";
            break;

        case '3':
            digit2 = "three";
            break;

        case '4':
            digit2 = "four";
            break;

        case '5':
            digit2 = "five";
            break;

        case '6':
            digit2 = "six";
            break;

        case '7':
            digit2 = "seven";
            break;

        case '8':
            digit2 = "eight";
            break;

        case '9':
            digit2 = "nine";
            break;

        case '0':
            digit2 = "\b";
            break;

        default:
            digit2 = strcpy(digit1, "\b");
    }

    if (a != 1) {
        printf("%s%s\n", digit1, digit2);
    }
    else {
        printf("%s\n", digit1);
    }

    return 0;
}

20-99から現在まで印刷に成功しています。しかし、エラーがあります。20、30、40 のいずれかを入力すると、-以前は削除していたはずなので、削除されません\b

4

3 に答える 3

4

あなたは置き換えることができます

digit2 = "\b";

if (digit1[0] != '\0')
    digit1[strlen(digit1) - 1] = '\0';

から末尾の文字を効果的に削除しdigit1ます。

これは文字列のレベルで完全に機能するため、デバイス固有の動作に依存する必要がなくなり\bます。

于 2013-10-02T01:53:50.983 に答える