2009-02-23 68 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

我不是在向您推薦任何東西,我只是想知道爲什麼您需要使用這種多餘的非標準功能。