2009-02-23 35 views
0

好的输出应该是这个样子:如何在c中垂直打印字符串?

./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; 
} 
+0

尝试使用while循环并通过存在的参数递增计数器。 – tvanfosson 2009-02-23 04:06:22

+0

我将如何做到这一无限论据? – Kaity 2009-02-23 04:11:15

+0

@ kity:幸运的是,计算机不能处理无数的参数 - 它们本质上是有限的。你可以为while(* argv!= 0)'做一个不确定的(但仍然是有限的)数量的参数。 – 2009-02-23 04:21:34

回答

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 

错误检查省略等。这是一个练习,你要弄清楚如何处理非十进制参数。

3

看起来您需要使用for-loop来轮流获取每个值。

0

在循环中使用printf()。的argc是空白数量分隔参数的argv中[],在上面的例子中,的argc = 5

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

我不是在向您推荐任何东西,我只是想知道为什么您需要使用这种多余的非标准功能。