2015-08-15 20 views
0

我新的C,這裏是一個簡單的程序:顯示所* argv的除了第一個參數

#include <stdio.h> 
#define str char * 

int main(int k, const str argv[]) { 
    while(* argv) puts(* argv ++); 
    return 0; 
} 

所以,當我在鍋殼式,./myprogramm somearg otherarg

我得到:

myprogram somearg otherarg

我希望做的是跳過第一個參數,具有: somearg otherarg

重要的是,我想保持* argv的實施

我知道我可以做這樣的事情:

#include <stdio.h> 
#define str char * 

int main(int k, const str argv[]) { 
    int i = 0; 
    while(i<k-1){ 
     puts(argv[++i]) ; 
    } 

    return 0; 

} 

但我想保持* argv執行

在此先感謝

+0

難道你不能做* argv ++;然後使用while循環? (跳過第一個值) –

+0

不,我的陣列會走得很遠,我會得到「分割錯誤 」錯誤 –

回答

3

對於最起碼的變化的第一個版本,你可以在你的主循環使用

while(*++argv) puts(*argv); 

。它立即跳過參數「零」。 (經測試)

1

您可以創建一個變量來檢查您是否處於循環的第一次迭代中。

int main(int k, const str argv[]) { 
    int i = 0; 
    while(*argv) { 
     if (i != 0) puts(*argv++); 
     i = 1; 
    } 
    return 0; 
} 
+0

它看起來像我的解決方案保持* argv,你沒有看到任何其他的可能性?甚至是一個骯髒的人,在* argv本身上工作?例如* argv = null idk ...你猜對了練習目的.. :) –

+0

不,它檢查第一個參數,並且只打印參數,如果它不是第一個參數。 –

+0

亞歷山大解決方案似乎是最好的,仍然upvoting您的建議。 –

0
int main(int k, const str argv[]) { 
int i = k-1; 
while(i>0){ 
    puts(argv[i]) ; 
i--; 
} 

return 0; 

} 
+0

這是我寫的一個倒退,雖然這樣不努力,但謝謝你試圖幫助 –

+0

添加一個解釋給代碼的答案通常會使他們更有幫助的社區 – xShirase

0

我測試了這一點,它的工作原理。無賽格故障..

#include <stdio.h> 
#define str char * 
int main(int k, const str argv[]) { 
    *argv++; 
    while(* argv) puts(* argv ++); 
    return 0; 
} 
+0

nope得到這個錯誤:cx033.c:在函數'main ': cx033.c:5:2:警告:未使用計算出的值[-Wunused-value] * argv ++; ^ –

+0

啊,在這種情況下,Alexanders的答案是一樣的,只是它不會拋出這個警告。 (因爲它在while循環中使用) –

+0

我試過你的代碼之前,你提出它,我有一個真正的錯誤不只是一個warnign我的意思是它不工作,即使確實我有點不明白這似乎不是同樣 –