3

そこで私は C を学び、Learn C を難しい方法で使用することにしました。とにかく、例の 1 つを編集しようとしましたが、出力は期待したものではありません。コマンドラインからプログラムを e14 asd として呼び出します。これは「すべき」印刷: 'e' == 101 'a' == 97 's' == 115 'd' == 100

ただし、「d」行はまったく出力されません。私が持っているコードは次のとおりです。

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

void print_letters(int argc, char *arg[])
{
    int i = 0;
    int j = 0;
    for(j = 0; j < argc; j++) {
        for(i = 0; arg[i] != '\0'; i++) {

            char ch = arg[j][i];
            printf("j is %d and i is %d\n", j, i);

            if(isalpha(ch) || isblank(ch)) {
                printf("'%c' == %d \n", ch, ch);
            }
        }
        printf("\n");
    }
}


int main(int argc, char *argv[])
{
    print_letters(argc, argv);
    return 0;
}

問題はargv部分に関係していると思いますが、周りを見回しても、「d」が表示されない原因が正確にはわかりません。

誰かが私にそれを説明できれば、それはありがたいです。

ありがとう!

4

2 に答える 2

10
for(i = 0; arg[i] != '\0'; i++) {

する必要があります

for(i = 0; arg[j][i] != '\0'; i++) {
//            ^^^

ループ終了条件は、1 つのコマンド ライン引数の文字を反復する必要がありますが、実際には引数を反復しています。

于 2013-07-10T07:17:10.620 に答える
0

argcコマンド ライン引数を使用する前に、 が引数の数をカウントし、引数argvを格納する 2 次元配列であることを知っておく必要があります。この場合、たとえば、exe ファイル名がmain.exeで、コマンド ラインに入力main.exe asdすると、引数の値はargc == 2,argv[0] == 'main.exe'およびargv[1] == 'asd'. コマンド ライン引数の使用方法の詳細については、「C コマンド ライン引数の解析」を参照してください。

于 2013-07-10T07:32:25.597 に答える