簡體   English   中英

命令行參數

[英]Command Line Argument

我在弄清楚如何使此代碼正常工作時遇到了麻煩。 假定要取決於命令行中給出的參數,它應該打印出問候語。

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

double testscore;

    if (argc == 2) {
        printf("Hello, Mr.%s.\n", argv[1]);

    }
    else if (argc == 3 && argc == testscore) {
        testscore = atof(argv[2]);
        printf("Hi, Mr.%s, your score is %.1f\n", argv[1], testscore);
    }
    else  {

        printf("My name is %s %s.\n", argv[1], argv[2]);
    }
}

如果某人僅輸入姓氏,那么終端將打印出...

您好,姓氏先生

...因為他們只提出了一個論點。 這很好。

我遇到的問題是給定的命令行參數為== 3 如果給出了3個參數,則終端都應該打印出...

嗨,last_name先生,您的考試成績為test_score

...要么...

我的名字是first_name last_name。

如果僅在命令行參數中輸入姓氏和測試分數(史密斯3.4),則將其打印出來(例如使用姓氏Smith的示例),然后將其打印出來...

我叫史密斯3.4

但是,它確實可以用於輸入名字和姓氏(John Smith)。 這給...

我叫約翰·史密斯。

我不想要答案 ,我只想要我做錯了什么,並提示如何解決它。

我不想要答案,我只想要我做錯了什么,並提示如何解決它。

問題1:在初始化之前,您正在使用testscore變量。

問題2:您沒有使用atof執行錯誤處理。 我建議使用strtod() 您可以對其執行一些錯誤處理,以了解第三個參數是否為浮點數。 您也可以創建自己的atof()實現,該實現將轉換並報告轉換中的錯誤(如果有)。

提示:嘗試首先檢查傳遞給c程序的參數數量。 之后,嘗試使用strtod()或您自己的實現將第三個參數轉換為float。 如果轉換成功,則將float convrsion的結果分配給test_score並輸出last_nametestscore 如果不是,則將第三個參數視為last_name並打印first_namelast_name

您的問題是與此行:

else if (argc == 3 && argc == testscore) {

實際上,當argc == 3時,您要檢查argv [2]是否為數字參數。

else if ( (argc==3) && (is_numeric_arg(argv[2])==1)) {

可能的實現方式是:

int is_numeric_arg(char* arg)
    {
        int isInt = 0;
        int isFloat = 0;
        int isChar = 0;
        char* currChar;
        int i = 0;
        currChar = arg;
        isInt = 1;
        while (*currChar != '\0')
        {
            if(*currChar < '0' || *currChar > '9')
            {
                if(*currChar == '.' && isInt == 1)
                {
                    isInt = 0;
                    isFloat = 1;
                }
                else
                {
                    isInt = 0;
                    isChar = 1;
                }
            }
            currChar++;
        }
        if (isChar == 1){ return 0; } // argument is a string
        else { return 1; } // argument is a int or float
    }

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

    double testscore;

    if (argc == 2) {
        printf("Hello, Mr.%s.\n", argv[1]);

    }
    else if ( (argc==3) && (is_numeric_arg(argv[2])==1)) {
        testscore = atof(argv[2]);
        printf("Hi, Mr.%s, your score is %.1f\n", argv[1], testscore);
    }
    else  {

        printf("My name is %s %s.\n", argv[1], argv[2]);
    }
}

我沒有測試代碼,可能有更好的方法來檢查命令行中的參數是否為“數字”。

得到了答案的家伙。 要檢查它而不使用其他功能,它將是

....

else if ( argc==3 && sscanf(argv[2], "%f", testscore) 


{


    testscore = atof(argv[2]);

    printf("Hi, Mr.%s, your score is %.1f\n", argv[1], testscore);
}

...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM