2012-09-18 37 views
0

我需要在命令行中創建一個程序,該程序接受不少於2個參數並且不超過6個參數,然後打印出來的第一或第二字符 EX:ASDF ASDF ASDF ASDF 打印出爲:ASAS使用C中的命令行檢測參數,然後輸出參數的第一個或第二個字符

我有初始陣列設置和工作時,for循環以下是爲了切斷串斷在輸入的空間中,並複製它到一個新的字符串,但它不能正常工作。我是C新手,也是本站。任何幫助是極大的讚賞。

#include <stdio.h> 
#include <string.h> 

int main(){ 

char a[50]; 
char b[50]; 
char c[50]; 
char d[50]; 
char e[50]; 
char f[50]; 

int i; 

printf("enter a string (Ex: asdf asdf asdf... Must have atleast 2 arguments but no more than six): "); 
scanf("%s", a); 
printf("%c", a); 

for (i = 0; i != 50; i++){ 

     if(a[i]==' '){ 
     char strncpy(b, &a[i], i+2); 
     printf("\n%c ",a[1]); 
     printf("%c ",b[0]); 
     } 
} 
for (i = 0; i != 50; i++){  
     if(b[i]==' '){ 
     char strncpy(c, &b[i], i+2); 
     printf("%c ",c[1]); 
     } 
} 
for (i = 0; i != 50; i++){  
     if(c[i]==' '){ 
     char strncpy(d, &c[i], i+2); 
     printf("%c ",d[0]); 
     } 
} 
for (i = 0; i != 50; i++){  
     if(d[i]==' '){ 
     char strncpy(e, &d[i], i+2); 
     printf("%c ",e[1]); 
     } 
} 
for (i = 0; i != 50; i++){  
     if(e[i]==' '){ 
     char strncpy(f, &e[i], i+2); 
     printf("%c ",f[0]); 
     } 
} 
return 0; 
} 
+0

我缺少的東西?當你說'在命令行傳遞參數'時,我希望你談論的是傳遞給'main()'的'argv'數組。情況並非如此嗎?我已經準備好了答案,但也許你可以先澄清一下。 – paddy

+0

是的,那是我想要做的。然而我只是在一段時間後嘗試着這樣做 – Church

+0

嗯,我看到你已經編輯了你的問題,所以你正在從控制檯讀取命令,而不是命令行。在你說這就是你真正想要做的事情之後,我發佈了我的命令行答案。如果這不是你的意思,我會刪除它。 – paddy

回答

0

你並不需要你的字符串複製出來的任何地方......在命令行即將你有他們坐在argv

int main(int argc, char **argv) 
{ 

} 

argc是總數參數加1(第一個是調用程序的名稱),argv是指向每個參數字符串的指針數組。這些已經從命令行標記。

所以首先你想測試你有足夠的論據。我想明確地做出了新的變數,從比較中刪除的off-by-一個困惑:

int nparams = argc - 1; 
if(nparams < 2 || nparams > 6) { 
    printf("Wrong number of arguments\n"); 
    return -1; 
} 

在你的論點然後你循環。第一個將位於數組的第一個位置......從您的示例中,您似乎打印出第一個參數的第一個字符,然後打印下一個字符的第二個字符,然後繼續交替。這是一個模塊操作。我有一個變量which,它選擇打印哪個字符。

int i, which; 
for(i = 1; i <= nparams; i++) { 
    which = (i-1) % 2; 
    printf("%c\n", argv[i][which]); 
} 

這確實假定每第二個參數至少有兩個字符長。沒有錯誤檢查。如果您需要檢查錯誤,則需要確保您打印的字符不是字符串終結符(值爲0)。在第二個字符的情況下,您還需要檢查該值是否爲0之前的值。我不知道是否可以指定一個長度爲零的字符串參數。也許一個知道的讀者可以發表評論。

好吧,我不妨把它...因此你的循環看起來有點像這樣:

if(argv[i][0] == 0 || argv[i][which] == 0) { 
    printf("\n"); 
} else { 
    printf("%c\n", argv[i][which]); 
} 
+0

謝謝你,你是救命恩人! – Church

相關問題