1

私はCプログラミングを学んでいます。私のプログラムは、私が提供するものよりも無関係な数値を読み取ります。何か助けはありますか?私はどこに行方不明ですか?

#include <stdio.h>

main(int argc, char argv[])
{
    int i,sum, digit;
if(argc == 1)
{
    printf("\n No arguments specified");
    return 0;
}
for(i=1;i<argc;i++)
    {
    digit = argv[i];
    printf("Argument is: %d", digit);
    //sum += argv[i];
    }
printf("The sum of all numbers is: %d", sum);
return 0;
}

サブブ

4

4 に答える 4

8

あなたmain()は間違っています。そのはず:

int main(int argc, char *argv[])
                        ^
                        |
                    IMPORTANT!

引数ベクトルは、文字の配列ではなく、文字列ポインターの配列であるためです。

次に、引数を無効に整数に変換しています。eg を呼び出すstrtol()か、そうする必要がありますsscanf()。引数は文字列の配列としてプログラムに渡され、文字列"42"(たとえば) は C では数値と​​は大きく異なるため、この変換が必要42です。

私が言及した変換関数はどちらも、失敗したかどうかを検出できることに注意してください。たとえば、ユーザーがプログラムに数値以外の引数を与えた場合、それを検出し、先に進んでそれらを数値として扱うのではなく、それを検出することが重要です。

于 2013-02-11T15:36:15.570 に答える
1

argv[i]整数ではなく文字列へのポインタです。c の文字列は char 配列です

だからあなたのプログラムは

digit = atoi(argv[i]);

atoi()文字列を整数に変換することを許可し、それは#include <stdlib.h>

于 2013-02-11T15:35:30.633 に答える
1

main(int argc, char argv[])する必要がありますint main(int argc, char *argv[])

mainの戻り値は、プログラムがどのように終了したかを示すため、明示的に int に設定する必要があります。mainの 2 番目の引数argvは「引数ベクトル」を意味するため、その型はchar *[]orである必要がありますchar **

于 2013-02-11T15:35:56.537 に答える
0

argv から整数として読み取っています - 常に argv 配列に文字列を取得します - として定義する必要がありますchar* argv[]atoi( argv[i] )整数値を取得するために使用することを検討してください。

于 2013-02-11T15:36:17.187 に答える