我需要创建一个 C 程序,该程序将作为命令行参数传递的整数并打印总和



>我需要在单个文件"sum.c"中编写一个程序,该程序在命令行上接受多个整数,获取这些整数的总和并将它们打印到 stdout。程序必须使用 strtol 之类的东西从字符串转换为数字。

到目前为止,我的代码如下所示:

#include <stdio.h>
int main (int argc, char *argv[]){
int a, b, sum;
int i; //looping through arguments using i
if (argc<2) {
printf("Please include at least two integers to get the sum.n");
return -1;
}
a = atoi(argv[1]);
b = atoi(argv[2]);
sum=a+b;
printf(sum);
return (0);
}

这包括错误检查,以确保至少传递两个参数。但是,我当前的代码只允许两个参数。我需要弄清楚如何更改它以处理任意数量的参数,并检查传递的数字是否只是整数,没有其他内容。我在这里发布的原始代码仍然有编译错误。我已经从编码中休息了很长时间,所以我知道它目前很差。

更新的代码:

#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[]) {
int sum;
sum = 0;
if (argc<2) {
printf("Please include at least two integers to get the 
sum.n");
exit (-1);
}
for (int counter = 1; argv[counter] != NULL; ++counter) {
sum += atoi(argv[counter]);
}
printf("%dn", sum);
exit (0);
}

现在看起来怎么样?

执行时收到错误:

./sum.c: line 4: syntax error near unexpected token `('
./sum.c: line 4: `int main (int argc, char *argv[]) {'

新代码基本上没问题,除了调用exit -1上的错误是一个错误。 调用必须exit(-1)

exit -1没有生成编译错误的原因是 C 允许编译器接受无效的表达式作为合法表达式(因此,以下是合法的 C 代码:

static void
useless_func (void)
{
5;
exit;
}

此函数有两行根本不执行任何操作 - 值 5 和作为退出函数地址的值。 请注意,调用 useless_func(( 不会导致程序终止,因为不会调用 exit 函数本身(。

你可以在你的程序中看到,如果你调用没有参数,程序不会终止 - 0的总和将被打印出来。 如果将行exit -1更改为exit 1,则会出现编译错误,因为现在您不再具有合法表达式(编译器将您拥有的内容视为exit - 1而不是exit -1,减号使其成为表达式(。

如果您使用 gcc 作为编译器,使用 -Wall 进行编译将生成警告。 如果你用 -Wall -Werror 编译(一个非常好的习惯(,你会得到一个错误。

此外,您应该通过调用exit(0);来结束您的程序

C 被编译,然后可以执行生成的可执行文件。您不运行 C 源代码

./sum.c

尝试运行 C 源代码。
你需要类似的东西

$ gcc -std=c99 -pedantic -Wall sum.c -osumexe
$ ./sumexe

最新更新