0

出力は次のようになります。

./a 3 4 8 2  
3  
4  
8  
2  

これは私がこれまでに持っているものですが、私は迷っており、出力する最初の整数しか取得できません (文字列で指定された整数を取得する GetInt を使用する必要があります):

int main (int argc, char*argv []){  
   int v;    
   int i;  
   i = 1;  
   v = GetInt(argc, argv, i + 1);  

   if(argc >= 1){  
      printf("%d\n", GetInt(argc, argv, i));  
   }  
   return 0;  
}  
4

4 に答える 4

3

各値を順番に取得するには、for ループを使用する必要があるようです。

于 2009-02-23T04:06:11.733 に答える
2

GetInt の実装を実際に見ることなく、次のようになります (C90 を想定):

#include <stdio.h>

int GetInt( int argc, char* argv[], int i ) {
    /* 
     * you may want to use sscanf, strtol or other functions,
     * but you haven't specified
     */
    return atoi( argv[i] );
}

int main ( int argc, char* argv[] ) {
    int i;
    for ( i = 1; i < argc; ++i ) {
        printf( "%d\n", GetInt( argc, argv, i ) );
    }
    return 0;
}

戻り値:

$ ./a.out 3 4 8 2
3
4
8
2

エラーチェックの省略など。非 10 進数の引数を処理する方法を理解することは、あなたにとっての課題です。

于 2009-02-23T04:13:25.180 に答える
1

注として、なぜ使用する必要があるGetInt()のですか?これは完全に不必要であり、標準ライブラリの一部ではありません。自分で (またはクラスで) 作成しない限り、これを使用することは想像できません。これは私がすることです:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i;
    for(i = 1; i < argc; i++)
      {
        printf("%s\n", argv[i]);
      }
    return 0;
}

を使用しないことはわかっていますGetInt()が、より短いので、おそらく役に立たないので使用しないでください。GetInt()さらに、既にatoi()関数があり、古いために使用したくない場合は、必要に応じてstrtol()関数として再キャストできintます。

私はあなたのことを批判しているわけではありません。なぜあなたがこの余分な標準外の機能を使用する必要があるのか​​ 疑問に思っています.

于 2009-02-23T04:36:56.870 に答える
0

ループで printf() を使用します。argc は argv[] 内の空白で区切られた引数の数で、上記の例では argc = 5 です。

于 2009-02-23T04:06:40.203 に答える