1

我正在学习 C 编程。我的程序读取的数字与我提供的数字无关。有什么帮助吗?我在哪里失踪?

#include <stdio.h>

main(int argc, char argv[])
{
    int i,sum, digit;
if(argc == 1)
{
    printf("\n No arguments specified");
    return 0;
}
for(i=1;i<argc;i++)
    {
    digit = argv[i];
    printf("Argument is: %d", digit);
    //sum += argv[i];
    }
printf("The sum of all numbers is: %d", sum);
return 0;
}

副部

4

4 回答 4

8

main()错了。它应该是:

int main(int argc, char *argv[])
                        ^
                        |
                    IMPORTANT!

由于参数向量是字符串指针数组,而不是字符数组。

然后,您将参数无效地转换为整数,您需要调用 egstrtol()sscanf()这样做。这种转换是必要的,因为参数作为字符串数组传递给您的程序,并且字符串"42"(例如)在 C 中与 number 非常不同42

请注意,我提到的两种转换功能都可以检测它们是否失败;例如,如果用户给你的程序提供了非数字参数,那么检测它而不是继续将它们视为数字是很重要的。

于 2013-02-11T15:36:15.570 回答
1

argv[i]是指向字符串而不是整数的指针。c中的字符串是char数组

所以你的程序应该是

digit = atoi(argv[i]);

atoi()允许将字符串转换为整数,它来自#include <stdlib.h>

于 2013-02-11T15:35:30.633 回答
1

main(int argc, char argv[])应该int main(int argc, char *argv[])

main的返回值指示程序是如何退出的,因此它应该显式设置为 int。main的第二个参数argv表示“参数向量”,因此它的类型应该是char *[]or char **

于 2013-02-11T15:35:56.537 回答
0

您正在以整数形式从 argv 读取 - 您将始终在 argv 数组中获取字符串 - 它应该定义为char* argv[]. 考虑使用atoi( argv[i] )来获取整数值。

于 2013-02-11T15:36:17.187 回答