arg [v]输入和输出值

时间:2013-06-01 10:04:30

标签: c

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.为什么会这样?

3 个答案:

答案 0 :(得分:3)

'4'的ASCII代码不是4,而是52。如果您想要实际数字而不是字符串,请使用atoi(argv[1])将第一个参数转换为n整数。

答案 1 :(得分:0)

请注意argv[i]的类型:

main(int argc, char* argv[])
                 ^
                 | argv[i] is a string.

如果索引和访问*argv[i]的元素,它基本上是 char not int 。这就是'4'被解释为52的原因,它是char '4'的ASCII值。

将for和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 - 参数计数器检查传递给main的参数数量是很好的。

 if(argc < NoOfArgumentsNeeded) {
     // print error and exit
 }

答案 2 :(得分:0)

当您通过命令行参数传递某些内容时,它们默认为字符流,并分配给**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;
}