2016-10-31 33 views
0

我會盡力解釋我想要做什麼。我已經有了這個程序(不起作用),它被編寫成在Windows中從CMD控制檯調用。我使用的是從主要功能如何將char * argv []從主函數指向表

int main(int argc, char *argv[]) 

但在這種情況下參數,我不能使用調試器來找到我做錯了什麼...... 我是否能夠以某種方式連接的char * argv的[]參數在代碼中創建表? 例子:

int main(int argc, char *argv[]) 
{ 
char tablica[] = { 'K','2','+','1','-','3','*','(','3','+','2',')','*','2' }; 
tablica = **argv; //// IDK HOW TO CONNECT THESE TWO 
+3

你究竟想在這裏做什麼?真的不清楚你想從這個代碼中得到什麼。 –

+0

連接是什麼意思? CONCATENATE?而且,一般來說,你是否有機會嘗試製作命令行計算器? –

+0

看起來OP正在嘗試將命令行參數傳遞給main(),而不是將它們添加到Visual Studio中相應的Debugger選項卡中。 – drescherjm

回答

6

這裏是你如何通過假參數傳遞,並以你的陣列

#include <stdio.h> 

int main(int argc, char* argv[]){ 
    char *tablica[] = { argv[0],"K","2","+","1","-","3","*","(","3","+","2",")","*","2" }; 
    int i; 
    argv=tablica; 
    argc=sizeof(tablica)/sizeof(tablica[0]); 

    for (i=0;i<argc;i++) 
    { 
     printf("%s\n",argv[i]); 
    } 
    return 0; 
} 

結果:

your_executable 
K 
2 
+ 
1 
- 
3 
* 
(
3 
+ 
2 
) 
* 
2 

注意事項:爲了要符合的argc,argv的:

  • I已經將字符數組更改爲數組char *(單引號=>雙引號)。這似乎是合乎邏輯的,因爲如果沒有,你不能在你的論點中傳遞> 9的實例數!
  • 我也改寫了argc(自動從你的數組中計算)
  • 我已經在你的數組中插入了程序名,否則它會移動參數解析。
+0

這正是我想要的!謝謝 – Mikkey

0

請注意,您的代碼當前假定每個字符都是新元素。這可以防止大於9的數字。如果你承諾這個string爲你做這個很簡單。

const auto tablica = string(argv + 1, argc - 1) + "K2+1-3*(3+2)*2"s 

或者,如果你想你的命令行參數爲後綴:

const auto tablica = "K2+1-3*(3+2)*2"s + string(argv + 1, argc - 1) 

如果你需要轉儲到分隔列表這一點,你可以這樣做:

copy(cbegin(tablica), cend(tablica), ostream_iterator<char>(cout, "\n")) 
2

你可以做將代碼分隔成可測試的函數更好。這將允許您編寫一個單元測試項目,以查看它是否在已知輸入上正確運行(如您已經準備好的),或者直接從argc,argv的main調用它。

// your code 
int your_code (int argc, char* argv[]); 

// can be called from main 
int main(int argc, char* argv[]){ 
    your_code(argc, argv); 
    return 0; 
} 

// or can be tested 
void unit_test() { 
    char * tablica[] = ...; 
    int arg_count = sizeof(tablica)/sizeof(tablica[0]); 
    your_code(arg_count, tablica); 
} 
+0

這是正確的解決方案 –