1

我是新來的C++,我想知道它是如何工作的。 所以我有下面的代碼:命令行參數not incrementinc argc

int _tmain(int argc, _TCHAR* argv[]) 
{ 
std::wcin.get();//for console window input 
int i=1; 
    // decode arguments 
    if(argc < 2) { 
     printf("You must provide at least one argument\n"); 
     exit(0); 
    } 
    // report settings 
    for (;i<argc;i++) printf("Argument %d:%s\n",i,argv[i]); 

return 0; 
} 

的看到如何argc和argv作品。 但是,不管我在控制檯中輸入多少個參數,argc都不會增加。 它仍然是1. 我知道argv [0]是程序名。我的輸入是類似於:「aaa bbb ccc ddd」。 我相信這argc應該是5吧? 我在做什麼錯?爲什麼它不會增加?

謝謝。

+4

你如何將這些參數傳遞給你的程序? –

+0

從控制檯窗口,當它從wcin.get()彈出時;我輸入參數,如「abc efg xyz」。 –

+1

@IonutDaniel當程序的控制檯打開時,命令行參數已經設置。那時已經太遲了。 –

回答

5

看起來好像你正在使用MSVS(簽名是_tmain(int argc, _TCHAR* argv[]))。如果您從IDE運行代碼,則需要在項目設置中指定參數,而不是命令行。

enter image description here

從像在命令行中運行:

test.exe arg1 arg2 

也將正常工作。你在做什麼不會修改參數。

+0

嘿,謝謝了,現在可以使用了。這非常有用。在這種情況下,我還有一個問題。我正在做這個「研究」爲了創建一個命令行解析器,其中的參數將被傳遞爲:-switch1 argument1 argument2 -switch2 argument等等。我可以在這種情況下使用這個設置嗎? –

+0

@IonutDaniel此設置僅適用於從Visual Studio運行程序的情況。如果您計劃手動運行可執行文件,則必須使用命令行選項。 –

+0

能否詳細說明一下。這件事對我來說有點抽象。再次感謝 。 –

2

調用wcin.get()不會影響argv或argc。參數在程序啓動時的一開始就有詳細說明。它們在命令行上指定,緊跟程序名稱後面,用空格分隔。