int
main(int argc, char *argv[]) {
int n;
if (2 <= *argv[1] && *argv[1] <= 20){
n = *argv[1];
return 0;
}
所以我試圖設置n = argv [1]的值。 輸入是"C: myprogram 4"
所以輸出應該是4.但是當我打印n的值時,我得到了52.爲什麼這是?arg [v]輸入和輸出值
int
main(int argc, char *argv[]) {
int n;
if (2 <= *argv[1] && *argv[1] <= 20){
n = *argv[1];
return 0;
}
所以我試圖設置n = argv [1]的值。 輸入是"C: myprogram 4"
所以輸出應該是4.但是當我打印n的值時,我得到了52.爲什麼這是?arg [v]輸入和輸出值
'4'
的ASCII碼不是4
而是52
。如果您想要實際的數字而不是字符串,請使用atoi(argv[1])
將第一個參數轉換爲n整數。
通知argv[i]
類型:
main(int argc, char* argv[])
^
| argv[i] is a string.
如果*argv[i]
您指數和訪問元素它基本上是一個字符不是int。這就是'4'
被解釋爲52
的原因,它是char '4'
的ASCII值。
要處理和argv[i]
值爲整數將其轉換爲int。更好地轉換爲使用int atoi (const char * str);
int n = atoi(argv[i]);
注意:下面都是不同的:
4 is a int
'4' is a char
"4" is a string (\0 terminated)
此外,其良好的檢查使用argc
傳遞給主參數號 - 參數計數器。
if(argc < NoOfArgumentsNeeded) {
// print error and exit
}
當你通過命令行參數傳遞的東西,他們都默認字符流和被分配到**argv
。當你獲取argv[i][j]
時,你會得到一個字符。
如果你做argv[i]
你會得到一個字符串,你的情況是"4"
。所以,你所嘗試的是錯誤的。
有你有52
原因是性格4
的ASCII值是52
使用內置atoi(str)
你可以轉換字符串,如"438"
整數438
請參閱下面的代碼:
#include<stdio.h>
int
main(int argc, char *argv[]) {
int n=-1; //initialized to prevent garbage incase if case fails
if (2 <= atoi(argv[1]) && atoi(argv[1]) <= 20){
n = atoi(argv[1]);
}
printf("%d",n);
return 0;
}
請注意,'的atoi() '根據定義在任何錯誤條件下產生未定義的行爲。對於允許處理錯誤的字符串到數字的轉換,可以使用'strtol()'(或'strtoul()')。) –