2

私には2つの問題があります:

最初の問題は、for (apr = 0; apr < aprno; apr++)文字を 1 つずつ追加できないことです。たとえば、aprno = 4 の場合、A を入力すると 4th apr. を求められますが、AAAA を入力すると機能します... また、整数のみで機能します

2 番目の問題は、char と int の比較です。それらを比較できないことは知っていますが、どこでもそれを行う方法が見つかりませんでした。

addnoaprons:
    system("cls");
    printf("Add number of available aprons: ");
    scanf("%d", &aprno);
    goto addtypeaprons;

addtypeaprons:
    if (aprno < 1) goto addnoaprons;
    else {
        system("cls");  
        printf("Add types for %d aprons total:", aprno);
        for (apr = 0; apr < aprno; apr++)
            {   
                system ("cls");
                printf("Aprons total: %d", aprno);
                printf("\n\nNo. %d apron type: ", apr + 1);
                scanf("%c", &pismapr[apr]);
                if (pismapr == 'A') poleapr[apr] = 1;
                if (pismapr == 'B') poleapr[apr] = 2;
                if (pismapr == 'C') poleapr[apr] = 3;
                if (pismapr == 'D') poleapr[apr] = 4;
                else goto addtypeaprons;
            }
            goto showaprons;
        }
4

2 に答える 2

5

pismaprの配列のようcharです。単一の と直接比較することはできませんchar。対象の配列要素だけを比較する必要があります。

if (pismapr[apr] == 'A') poleapr[apr] = 1;

PS 言わなければならないのは、これは私がこれまでに見た中で最も奇妙に見える C コードの一部です。で飛び回る代わりにgoto、コードのブロックを関数に移動してから、それらをループで呼び出す必要があります。つまり、

while (aprno < 1)
    aprno = readaprno();
于 2013-06-07T14:10:25.803 に答える
1

問題1:え?

あなたの最初の問題が何であるかはわかりませんし、あなたが何を求めているのか本当に理解できませんでした。ごめん。

問題 2: int と char の比較

intはい、合理的な範囲内でs とsを比較できますchar。ポインターのアドレスを a と比較するために、おそらくやりたくないことcharです。

あなたの質問とこれを見たとき:

scanf("%c", &pismapr[apr]);

宣言が表示されないため、それがs またはs のpismapr配列であることを意味しているとしか思えません。したがって、おそらくこれらを切り替えたいと思うでしょう:charint

if (pismapr == 'A')

に:

if (pismapr[apr] == 'A')

しかし、それはあなたのスニペットではわからない pismapr のタイプを想定しています。

問題3:後藤

それらを失います。本当。または、それらが必要な理由を教えてください。

問題 4: 呼び出しsystem()

ただしないでください。それは悪い考えであり、おそらく他の方法でそれを行うことができます。本当にこれをやりたいのなら、シェルスクリプトではなく、Cプログラムですべてを行う必要がありますか?

于 2013-06-07T14:12:40.357 に答える