2017-02-01 6 views
-1

私はC言語のコースから始めましたが、コマンドライン引数の問題にぶつかっています。代入はこれです(これ以上ありますが、これは最初のコマンドライン引数の部分です)。
- プログラムでは、1つのコマンドライン引数、負でない整数を受け入れる必要があります。
- プログラムがコマンドライン引数なしで実行される場合、または複数のコマンドライン引数を指定して実行される場合、プログラムは選択したエラーメッセージを出力して1を返します。
- ユーザーはコマンドライン引数を指定しますが、負でない整数(たとえば1)になります。それが実際に数値であることを確認する必要はありません。コマンドライン引数の条件pset2 caesar

は、だから私はこのコードを思い付いた:

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


    int main(int key, string plain[]) { 

     if (key < 0 || plain[key] > 1) 
     { 
      printf("error\n"); 
      return 1; 
     } 
     else 

等...コードが続きます。

私はいくつかのことを試しましたが、私は壁にぶち当たっています。コンパイラは、私が思いついたif条件を受け入れたくありません。ポインタと整数の比較にエラーがあります。割り当てのリストの太字の条件を指します。だから、私はコマンドライン引数のargvの部分は、ユーザーが入れた文字列の配列だと思った。私の考えは、ユーザーが複数の文字列を与えるとき、エラーメッセージを与える必要がありますコンパイラに伝えることだったので、 "プレーン[キー]> 1)"。あるいは、ここでコマンドライン引数を完全に理解していると思いますか?ありがとう。

+2

'plain [key]'は 'string'で' int'ではありません –

+0

'plain [key]'はおそらく境界外です。どのパラメータが 'main'に渡されるかを調べるべきです。 – Gerhardh

+0

Cに 'string'型がありません。それは何ですか? 'main'のシグネチャは' int main(int、int * []) 'であるか、最後のaprameterは' int ** 'と同じです。 – Olaf

答えて

0

あなたは引数の目的を誤ってmainに誤解しました。最初のint引数(通常はargc)は、配列引数の項目数です。

そして、引数(通常はargvと呼ばれます)には、プログラムのすべての引数(実行可能ファイル名を含む)がテキストとして含まれています。次のように

だからあなたの実行ファイルがfoo呼び出された場合、あなたはfoo 1 a barとしてそれを呼び出し、メインの引数は次のようになります。

int argc == 4 
char **argv => {"foo", "1", "a", "bar"} 

だからあなたのプログラムは、単一の引数を受け入れなければならない場合、それはそのargc == 2を保持しなければなりませんargv[1]は引数で、文字列から数値に変換する必要があります。

0

plain[key]plainのキー要素にアクセスします。文字列ポインタの配列(argv)。

この配列のサイズは、キー(argc)で表されます。

だから何をしたいの原因は、0ベースの指標である」、

if (key > 1) 
{ 
    //.. 
} 

はまた、プレーン最後の要素はkey-1です。