1

15 個の数字を読み取り、それらを次のような文字に変換したい: 1 = A、2 = B、3 = C、4 = D ... ここにこの構造があります:

struct Num {    
    int number;
    char letter;
};

struct Num num[150];

そしてこれは数字を読むために:

void read_num() {
    int i;
    for (i = 0; i < 15; i++) {
        printf("Insert number\n");
        scanf("%d", &num[i].number);
        fflush(stdin); 
    }
}

そして今、各数字を文字に変換するものが必要です.25で巨大な関数を作成しましたifが、うまくいかないようです. ところで、私は数字に行くだけでよい25ので、アルファベットのAからYまでです。機能しない機能は次のとおりです。

void convert() {    
    int i, ii;
    for (i = 0; i < 15; i++) {
        if (num[i].number = 1){
            num[i].letter = "A";
        } else
        if (num[i].number = 2) {
            num[i].letter = "B";
        } else
        if (num[i].number = 3) {
            num[i].letter = "C";
        } else
        if (num[i].number = 4) {
            num[i].letter = "D";
        } else
        if (num[i].number = 5) {
            num[i].letter = "E";
        ...
        }
    }
}

Windows と C プログラミングで Dev C++ を使用しています。初心者の質問であることは承知していますが、助けてください。

4

2 に答える 2

4

1) は絶対に使用しないでください。これはfflush(stdin)未定義の動作です = C プログラミングで起こりうる最悪の事態です。

2)==次のように比較に使用しますif (num[i].number == 5)

3)"a"は型の文字列リテラルconst char[2]です。char一重引用符で囲まれた が必要です: 'a'

そうは言っても、今日使用されているほとんどすべてのエンコーディングでは、文字は辞書式の順序で配置されているため、必要な範囲内にあるnum[i].letter = (char)(num[i].number + 'A' - 1)ことが確実である限り、 を実行できます。そうでない場合は、条件が必要になりますが、次のように構成num[i].numberを使用する方が適切です。switch

switch (num[i].number)
{
    case 1:
        num[i].letter = 'A';
    break;

    ...
}

ところで、Dev-C++ は使用しないでください。これは古く、メンテナンスされていません。MinGW を使用したい場合は Code::Blocks を使用するか、無料の Visual C++ のコミュニティ エディションのいずれかを使用できます (C コードのコンパイルにも使用できます)。

于 2016-01-19T21:34:41.897 に答える