0

私のプログラムは、コマンドライン引数で負でない整数を受け入れる必要があります。私も使わなければならない

int main(int argc, string argv[])

メインを宣言します。

私のコード:

#include <stdio.h>
#include <cs50.h>

int main(int argc, string argv[])
{
    if (argv[1] < 0)
    {
        printf("Give one non-negative integer.\n");
        return 1;
    }
}

私の問題:-1コマンドライン引数として入力すると、プログラムが実行されないprintfか停止します。次のコード ブロックに進みます。それを修正するにはどうすればよいですか (main の正確な宣言を保持する必要があることを念頭に置いてください)。また、この現在のコードが間違っているのはなぜですか?

4

2 に答える 2

3

argvは文字列の配列なので、文字列を整数に変換する関数が必要atoiです。探している関数は です。

if (atoi(argv[1]) < 0)

実際のコードでは、無効なコマンド ライン引数をチェックできます。


<cs50.h>には、次の行があると思います。

typedef char *string;

通常の宣言方法は次のとおりであることを知っておく必要がありますmain

int main(int argc, char* argv[])
于 2013-11-05T03:21:17.957 に答える
2

そう。2つのこと。

int main(int argc, string argv[])

argv の型に注意してください。これは、長さが不明 (0 から n) の文字列の配列です。

次にこれに注意してください:

if (argv[1] < 0)

これは、文字列と int の間の比較演算子です。現在、文字列は簡単に整数値を持つことができます(十分に下に行くと、すべてがビットになります)..文字列の値が0未満の場合、期待どおりに動作します. 問題は、これがおそらく決して発火しないことです。言うまでもなく、C ではこれを行うことができます。入力するのはちょっと…まあ…文字列と int を比較するようなことをしてもかまわないからです。

ここで見ることができます: Converting string to integer Cは、文字列を整数値に変換する方法を理解するのに役立ちます。

上記のリンクされたSOの質問からの簡単な力:

int num = atoi(s);

だからあなたは代わりにすることができます...

if (atoi(argv[1]) < 0)

また

int argument = atoi(argv[1])
if (argument < 0)
于 2013-11-05T03:20:11.573 に答える