2013-10-15 42 views
1

我正在尋找一個簡單應用程序的示例,該應用程序將使用printf來基於位置參數表示兩個不同的字符串。C中的示例應用程序需要2個位置參數

bash我會用:

case $1 in 
    -h | --help)   showHelp 
          exit 
          ;; 
    *)      manPipe 
          exit 1 
esac 

而在此之前,我會列出一個名爲showHelp功能將被稱爲如果算子類型要麼$ foo -h$ foo -help到終端。其他任何類似$ foo -bar都會請求函數manPipe被調用。

我到目前爲止這樣的代碼:

#include <stdio.h> 
#include <cstring> 

int secretFunction() { 
    printf("Success! You found the secret message!"); 
} 

int main() { 

str posParam; 
posParam = X; 

printf("Enter a number:"); 
scanf("%s",&posParam); 

if (posParam == "X"){ 
    printf("Welcome to app!\nType: " + $0 + " t\nto show a message"); 
}else{ 
    if (posParam == "t"){ 
     secretFunction(); 
     } 
return 0; 
} 
return 0; 

我知道這個代碼是非常糟糕的,我試圖讓在bash上面的代碼中的一個例子。我並不想將bash script轉換成C app,我正在嘗試使用它。我從維基百科關於MD5 checksumC app的文章中提取了一些我想要處理的內容,該文章接受一個字符串併爲其計算MD5校驗和。我似乎無法弄清楚他們得到位置參數傳遞給應用程序的部分。

這是有點不同,我明白,因爲它提示用戶提供一個答案,然後將其分配給一個值。我寧願首先將它用作位置參數。

+0

所以,我是assu從「」不是C++標準庫標題的語言標記中找到,以涵蓋C等效的''。因爲在C和C++中都不是'str',即使是標準提供的有效類型。 – WhozCraig

回答

2

什麼是在擊$1(等人)中是在C程序argv[1]

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    if (argc > 1) 
    { 
     printf("You provided at least one argument (or parameter)\n"); 
     printf("The first argument is \"%s\"\n", argv[1]); 
    } 

    return 0; 
} 

的參數argcargv陣列中的有效條目的數量。 argv[0]是可執行文件的名稱,最多可以訪問argv[argc - 1]。 (其實你也可以訪問argv[argv],它總是一個NULL指針)。

+0

如何指定'argv [x]',其中'x'是預定參數,如'-k'和'-v',但其他任何東西都被認爲是垃圾?你需要一個數組來預先確定每個'argv []',我可以做'argv [-k,-v]',然後使用'if(argv [1] ==「-k」){做某事; ''或者會不會起作用? –

+1

@DanijelJ你不知道。就像在Bash中你實際上必須搜索它。你不能使用'argv [1] ==「-k」',你必須使用例如'strcmp(argv [1],「-k」)== 0'。在C中有很多參數解析的例子,如果你在POSIX平臺上(比如Linux,BSD或者OSX),那麼你可以使用['getopt'](http://pubs.opengroup.org/onlinepubs/ 9699919799/functions/getopt.html)函數來幫助你。 –

1

正如約阿希姆說,與argv[0]取代$0,還(假設str是一個char*):

scanf("%s",&posParam); 
     ^there is no need to use &, posParam is already a pointer. 

if (posParam == "X"){ 

字符串不能與==相比,改用:

if (strcmp(posParam, "X") == 0){

相關問題