[英]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_name
和testscore
。 如果不是,則將第三個參數視為last_name
並打印first_name
和last_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.