main函数参数,在VS中向命令行添加参数的方法
問題描述
使用main函數的參數,實現一個整數計算器,程序可以接受三個參數,第一個參數“-a”選項執行加法,“-s”選項執行減法,“-m”選項執行乘法,“-d”選項執行除法,后面兩個參數為操作數。
例如:輸入test.exe
?-a?1?2
??????執行1+2輸出3
問題分析
上面的邏輯思維很簡單,但是問題在于如何在VS中向main函數傳遞參數,即如何使用命令行參數,以及具體怎么傳參
解決方法
這里我直接給代碼,結合代碼進行解釋說明
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<windows.h>int main(int argc, char *argv[])
{int sum = 0;int num1 = atoi(argv[2]);int num2 = atoi(argv[3]);if (strcmp(argv[1], "-a") == 0){sum = num1 + num2;}else if (strcmp(argv[1], "-s") == 0){sum = num1 - num2;}else if (strcmp(argv[1], "-m") == 0){sum = num1 * num2;}else if (strcmp(argv[1], "-d") == 0){sum = num1 / num2;}printf("%d\n", sum);system("pause");return 0;
}
main函數也是可以傳遞參數的,這里使用了可變參數列表的知識,關于這方面的知識,大家可以自行了解,下面需要給大家看看如何在VS中給main函數傳參數。
右鍵單擊要 添加參數的工程-->屬性-->配置屬性-->調試,在右側“命令參數”欄輸入要添加的參數,各參數間用空格分離,比如我上面傳參數時,可以傳遞-a 2 4。如圖
我們看main函數的函數聲明部分
int main(int argc, char *argv[])
上面的傳入兩個參數,其中int argc的值會根據咱們傳遞的參數自動賦值,這里我們不需要管他,我們需要需要傳遞的參數只有下面的字符串。而*argv[]就是剛剛傳入的字符串,上面我傳入了-a 2 4,那么argv[1]的值為"-a",注意這里數組下標從1開始,argv[2]的值是2,argv[3]的值是4,這樣就不難分析我上面的代碼了。這里補充說明一下,main函數傳入的是字符串,但是我們要對整型進行相加減,上面使用了一個這個的作用是把字符串轉化成數字。
int main(int argc, char *argv[])
問題拓展
1.這里我們會出現一些傳參失誤,或者我多傳入幾個參數會是怎樣的結果呢,比如我傳入的參數是-a 2 4 -s 2 5,那么結果會怎么樣,還是我上面的程序,這里只是把argv[1]到argv[6]分別賦值了上面的參數,但是我并沒有使用argv[4]和他以后的內容,所以程序跑起來沒有太大的問題。
2.這里又有一個疑問,我們意識里面的數組不是下標從0開始嗎,為什么上面直接從1開始了呢,對于這個疑問,解決的方法也很簡單,我們既然知道參數是字符串,那么我們把argv[0],和argv[1]打印出來不就好了嗎,這里我傳入的參數是-a 2 4,請看代碼
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<windows.h>int main(int argc, char *argv[])
{printf("%s\n",argv[0]);printf("%s\n", argv[1]);system("pause");return 0;
}請看輸出的結果
根據圖中的結果我們不難發現,argv[0]存放的是程序所在的路徑字符串,argv[1]放的是第一個參數,而其他的參數我沒有打印出來。這里我們還明白了一個問題,就是main函數中的另一個參數int argc的值,系統會自動識別,值是參數個數加1,這個1對應的就是路徑參數。
總結
以上是生活随笔為你收集整理的main函数参数,在VS中向命令行添加参数的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输卵管堵塞好不好治疗
- 下一篇: 杂记2