2013-10-09 150 views
0

我正在爲一個類設計一個程序,其中一條指令是使用命令行輸入。例如,當您運行main -n 5 3時,它將以53作爲參數。什麼是-n命令行輸入作爲參數

如何在帶有代碼塊的PC而不是Linux機器上測試此功能?
我的程序如何讀取這些內容?
我需要命名我的文件主,然後在主要有兩個參數適當傳入?

+1

'-n'是'的argv [1]','5'是'的argv [2]'和'3'是'的argv [3]' – luiscubal

+0

我不明白什麼-n應該代表我的程序中,那麼我只需要兩個參數,即5和3. –

+0

你自己寫了這個程序嗎?如果是這樣,那麼你可以選擇'-n'的意思,如果它接受。您可以隨時打印錯誤消息並在發現意外參數時中止程序。 – luiscubal

回答

4

在你的程序你main函數原型

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

argc將包含的參數量過去了,argv是一個指向char*數組包含你的參數爲空值終止字符串。

通常argv[0]包含您的程序的名稱,argv[1]您的第一個參數,依此類推。在你的情況下,如果運行的參數程序-n 5 3你將不得不在argv以下內容

argv[1] = "-n" 
argv[2] = "5" 
argv[3] = "3" 
+0

這是有道理的,所以我可以訪問數組來分配在我的程序中使用的整數。這是我可以在Windows上測試的東西嗎? –

+0

@PaulthePirate是的,但請記住它們是以字符串的形式出現的。你需要首先用'atoi'或類似的函數將它們轉換爲整數。試着打印你的參數:'int i; for(i = 0; i

+0

@PaulthePirate試試這個:http://pastebin.com/Y8VAta1w – luiscubal

1

A.EXE -n 5 3

結果:

argv[0] = a.exe
argv[1] = -n
argv[2] = 5
argv[3] = 3
argv[4] = NULL

argc和將4


在Linux上,有一個在unistd.hgetopt功能,可以幫助您檢索n選項,並解析後面的參數。 Howevef如果你的程序只需要找到-n和讀取接下來的兩個參數的值,你可以這樣做:

int i, x = 0, y = 0; 
for (i = 0; i < argc; i++) { 
    if (strcmp(argv[i], "-n") == 0 && i + 2 < argc) { 
     x = atoi(argv[i+1]); 
     y = atoi(argv[i+2]); 
    } 
} 
+0

我沒有linux,所以我不能真正測試它,但我的文件需要在Linux上工作,所以我想在我移植到linux之前做盡可能多的測試。 –

+0

@PaulthePirate:我已經更新了我的答案+添加了一些額外的信息:) – LihO

+0

將int n = atoi(argv [1]); char * address = argv [2];工作?假設最後一次輸入的字符串爲 –

1

正如其他人所指出的那樣,參數argv中[...]。在現實世界中,許多人使用類似getopt的東西來解析參數,因爲它非常強大並且已經過測試。

1

通常C使用argc和argv來允許您索引從命令行傳遞的參數。我有一段時間沒有在PC上工作,但是當我做的代碼與Unix一致時。

#include <stdio.h> 

int main (int argc, char *argv[]) { 
    printf("Total args count=%s\n", argc); 
    printf("Command=%s\n", argv[0]); 

    for (i=1; i< argc; i++) { 
    printf("\narg%d=%s", i, argv[i]); 
    } 

    printf("\n"); 
    return 0; 
} 

這將返回

Total Args 4 
Command main 
    1 = -n 
    2 = 5 
    3 = 3