2010-06-22 84 views
0

我是C++的新手,我想知道如何在一些簡單的程序中使用某些函數。在C++中使用一些簡單函數的示例程序

例如:

mypg.exe function1 string1 
mypg.exe function1 textfile1 

注意到從STR /文件和節目或打印的文本。

然後:

mypg.exe function2 string1 
mypg.exe function2 textfile1 

採用文本不同的事情... 等。

任何手冊/教程或幫助?我應該學會怎樣才能做到這一點?

感謝很多:)

+2

將第二個參數設置爲字符串或文本文件可能不是一個好主意,它沒有標記來指示用戶需要哪個標記。如果用戶調用'mypg.exe function1 mystring',行爲是否真的會改變,取決於在當前目錄中是否有一個名爲mystring的文件? – sepp2k 2010-06-22 12:56:16

+0

那麼,理想的應該是它既可以是一個字符串(所以它對這個文本做了些什麼)或者一個文件(.txt,在這種情況下,它打開文件並且使文本做一些事情) – legami 2010-06-22 13:05:07

+3

如果用戶想要打開一個不以「.txt」結尾的文本文件?依靠文件擴展名通常是不好的做法。如果是我,我會讓它被稱爲「mypg.exe function1」,這是一個字符串「'或'mypg.exe function1 -f」這是一個文件名「' – sepp2k 2010-06-22 13:24:29

回答

8
void DifferentThing(char *s) 
{ 
    printf("DifferentThing %s\n",s); 
} 

int main (int argc, char * const argv[]) 
{ 
    if (argc > 2) 
    { 
     if (strcmp(argv[1], "function1") == 0) 
      printf("%s\n",argv[2]); 
     else if (strcmp(argv[1], "function2") == 0) 
      DifferentThing(argv[2]); 
    } 
    return 0; 
} 

更新:上面是不是真的C++,更像是C.這是更好的

#include <iostream> 
#include <string> 

void DifferentThing(const std::string &s) 
{ 
    std::cout << "DifferentThing " << s << std::endl; 
} 

int main (int argc, char * const argv[]) 
{ 
    if (argc > 2) 
    { 
     std::string param1(argv[1]); 
     std::string param2(argv[2]); 

     if (param1 == "function1") 
      std::cout << param2 << std::endl; 
     else if (param1 == "function2") 
      DifferentThing(param2); 
    } 
    return 0; 
} 
+0

我認爲這可以是有用的:)謝謝! 根據第二個參數(如果它是一個文件,提取文本然後執行與字符串相同的操作(例如打印),那麼做什麼不同的事情) – legami 2010-06-22 13:09:06

+0

@ofme:請注意,這是C,而不是C++。如果您正在學習C++,那麼瞭解'string'類比像'strcmp'這樣的C函數更有用。 – 2010-06-22 13:41:46

+0

@Mike你擊敗了我60秒的更新! – 2010-06-22 13:43:58

1
​​
+0

對於一個新人來說並不是一個很好的例子...... – 2010-06-22 13:03:04

3

在C++中,該程序的功能不知道它的功能叫什麼;也就是說,不可能(當給出函數名稱作爲字符串時)將其鏈接回原始函數。

但是,如果您手動進行此連接,則可以實現此目的。

#include <iostream>//for cout 
#include <string.h>//for strcmp 

using namespace std; 

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

    if(argc<3){ 
     cout << "not enough parameters\n"; 
     return 0; 
    } 

    if(strcmp(argv[1],"fuction1") == 0){//strcmp() returns 0 if the two strings match 
     //call function1 and do something with argv[2] 
    }else if(strcmp(argv[1],"function2") == 0){ 
     //call function2 and do something with argv[2] 
    } 

    return 0; 
} 

儘管您仍然需要決定是將argv [2]作爲普通的「字符串」還是作爲文件名。

+0

!strcmp會讓初學者感到困惑 – 2010-06-22 13:29:05

+0

@David Sykes的確如此。我最近做了很多C,所以我沒有注意到。感謝和編輯。 – sigint 2010-06-22 14:18:23