2017-04-17 6 views
0

コマンドライン引数を数値に変換するcプログラムを作成しました。今、私はそれらの数値を配列に格納したい。問題は、アレイ内の要素をプリントアウトするときに何か変わったことが起こることです。配列は、6番目の要素から印刷されます。ここでC配列は4番目の要素の後で読み始めます

は私のコードです:

int main(int argc, char *argv[]) 
{ 
    int i, j, num, randint, arrCount = 0; 
    int arrList[1000] = {0}; 

    for(i=1; i<argc; ++i) 
    { 
     for(j=0; argv[i][j] != '\0'; ++j) 
     { 
      if (argv[i][j] >= 'A' && argv[i][j] <= 'Z') 
      { 
       num = argv[i][j] - 'A'; 
       //arrList[j] = num; 
      } 
      else if (argv[i][j] >= 'a' && argv[i][j] <= 'z') 
      { 
       num = argv[i][j] - 'a'; 
       //arrList[j] = num; 
      } 
      num = num + '0' - 47; 
      arrList[j] = num; 
      arrCount++; 
      printf("%d ", num); 
     } 
    } 
    printf("\n"); 

    for(i=0; i<arrCount; i++) 
    { 
     printf("%d ", arrList[i]); 
    } 
} 

私がテストを実行するコマンドは次のとおりです。

./encript Hello World 

出力:

8 5 12 12 15 23 15 18 12 4 
23 15 18 12 4 0 0 0 0 0 

あなたの配列が印刷されご覧のよう配列の6番目の要素から始まり、なぜそれがそれをしているのか理解することができます。余分なゼロは、配列が実際には存在しない配列内の要素を出力しているためです。ほとんどの場合、印刷に必要な要素の数を見つけるために使用されるarrCountが乱されていることがわかります。 私はこれをずっとあまりにも長く見てきましたが、最も明らかにそうであるにもかかわらず、何が間違っているのか分かりません。

+0

'arrList [j] = num; arrCount ++;' - > 'arrList [arrCount ++] = num;'? – BLUEPIXY

+1

あなたのコードは、すべての単語が最後のものを上書きするので、おそらくarrList [j]に書き込むのではなく、1つの単語を引数として扱う方法しか知りません。arrList [arrCount] – areller

答えて

3

あなたはこのようarrListを埋める:0で

arrList[j] = num; 

しかしj再起動し、各コマンドライン引数のために、すなわちWorldの結果はHelloの結果を上書きします。すべての引数に渡ってarrCountが増加するため、代わりにarrList[arrCount]に格納する必要があります。

関連する問題