是的,这是我的C介绍网络课程的(最后一次)作业。
该作业提供了主程序,没有解释它的任何内容,并告诉你编写一个函数来打印并对其中的数组求和。
但是,我并不真正理解主程序中发生了什么。
为方便起见翻译;
源代码:
#include <stdio.h>
#include <stlib.h>
void print_count(int *, int);
int main(int argc, char *argv[]) {
int x, sum = 0, size = 0, array[5];
if (argc == 6) {
/* Program name and parameters received from command line */
for (x = 0; x < argc - 1; x++) {
array[x] = atoi(argv[x + 1]);
}
print_count(array, size);
} else {
printf("Error\n");
}
return 0;
}
现在我完全不知道如何开始编写所请求的程序以及要调用的变量/如何编写函数。
编辑3:完成练习
void print_count(int *array, int size) {
int i;
int sum = 0;
printf("Elements: ");
for (i = 0; i <= size; i++) {
printf("%d ", (array[i]);
sum = sum += array[i]);
}
printf("\nSum = %d ", sum);
return 0;
}
我想了解主程序中发生了什么,最好能够自己解决如何实际编写函数的问题。
答案 0 :(得分:3)
此:
array[5] = atoi(argv[x+1]);
显然是错误的,它总是试图分配到超出范围的array[5]
。它应该是:
array[x] = atoi(argv[x + 1]);
这会将x + 1
:th参数从字符串格式转换为整数,并将其存储在array[x]
中。如果您不熟悉标准函数atoi()
,请阅读the manual page。
所以如果你这样开始这个程序:
./myprogram 1 2 3 4 5
这有6个参数(第一个是名称本身),并且最终将包含包含数字1到5的array
。
然后在求和函数中,第一行应该是:
void print_count(int *array, int size)
这样您就可以为参数指定名称,这使它们可以在函数中使用。我认为,不提供名称是一个错误。
它并不需要&#34;互动&#34;比main()
更多; main()
调用print_count()
,向其传递指向array
的第一个元素和数组长度的指针,这是计算总和所需的全部内容。
答案 1 :(得分:1)
您的print_count
功能存在一些问题:
循环过了一步:i
应该在0
和size-1
之间变化。这个循环的标准习惯是:
for (i = 0; i < size; i++) {
...
增加sum
只需完成:
sum += array[i];
第一个(
行还有一个额外的printf
。
0
函数返回void
无效。以下是更正后的版本:
void print_count(int *array, int size) {
int i;
int sum = 0;
printf("Elements: ");
for (i = 0; i < size; i++) {
printf("%d ", array[i]);
sum += array[i]);
}
printf("\nSum = %d\n", sum);
}
答案 2 :(得分:1)
以下提议的代码:
现在提出的代码带有解释性注释:
#include <stdio.h> // printf(), fprintf()
#include <stdlib.h> // atoi(), exit(), EXIT_FAILURE
void print_count(int *, int);
int main(int argc, char *argv[])
{
if (argc != 6)
{
fprintf( stderr, "USAGE: %s int1 int2 int3 int4 int5\n", argv[0] );
exit( EXIT_FAILURE );
}
// implied else, correct number of arguments
// only declare variables when they are needed
int array[5];
// place each command line parameter into 'array',
// except program name
// I.E. skip the program name in argv[0]
for( int i = 1; i < argc; i++ )
{
// array[] index starts at 0, but loop counter starts at 1
array[i-1] = atoi(argv[i]);
} // end for( each value pointed at by argv[], except program name )
// print sum of command line parameters to stdout
int size = argc-1; // number of command line parameters after program name
print_count(array, size);
return 0;
} // end function: main