我正在爲一個類設計一個程序,其中一條指令是使用命令行輸入。例如,當您運行main -n 5 3
時,它將以5
和3
作爲參數。什麼是-n
?命令行輸入作爲參數
如何在帶有代碼塊的PC而不是Linux機器上測試此功能?
我的程序如何讀取這些內容?
我需要命名我的文件主,然後在主要有兩個參數適當傳入?
我正在爲一個類設計一個程序,其中一條指令是使用命令行輸入。例如,當您運行main -n 5 3
時,它將以5
和3
作爲參數。什麼是-n
?命令行輸入作爲參數
如何在帶有代碼塊的PC而不是Linux機器上測試此功能?
我的程序如何讀取這些內容?
我需要命名我的文件主,然後在主要有兩個參數適當傳入?
在你的程序你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"
這是有道理的,所以我可以訪問數組來分配在我的程序中使用的整數。這是我可以在Windows上測試的東西嗎? –
@PaulthePirate是的,但請記住它們是以字符串的形式出現的。你需要首先用'atoi'或類似的函數將它們轉換爲整數。試着打印你的參數:'int i; for(i = 0; i
@PaulthePirate試試這個:http://pastebin.com/Y8VAta1w – luiscubal
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.h
的getopt
功能,可以幫助您檢索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]);
}
}
我沒有linux,所以我不能真正測試它,但我的文件需要在Linux上工作,所以我想在我移植到linux之前做盡可能多的測試。 –
@PaulthePirate:我已經更新了我的答案+添加了一些額外的信息:) – LihO
將int n = atoi(argv [1]); char * address = argv [2];工作?假設最後一次輸入的字符串爲 –
正如其他人所指出的那樣,參數argv中[...]。在現實世界中,許多人使用類似getopt的東西來解析參數,因爲它非常強大並且已經過測試。
通常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
'-n'是'的argv [1]','5'是'的argv [2]'和'3'是'的argv [3]' – luiscubal
我不明白什麼-n應該代表我的程序中,那麼我只需要兩個參數,即5和3. –
你自己寫了這個程序嗎?如果是這樣,那麼你可以選擇'-n'的意思,如果它接受。您可以隨時打印錯誤消息並在發現意外參數時中止程序。 – luiscubal