>我需要在单个文件"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