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

错误检查省略等。弄清楚如何处理非小数参数是一个练习。

于 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 回答