我的练习是键盘输入列表整数,程序结束为0.然后打印数组之和。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
const int MAX_ITEMS = 50;
void inputIntegerNumber(int* a, int* count);
int sumOfInteger(int* n, int* count);
int main(int argc, char** argv) {
int x[MAX_ITEMS], count;
inputIntegerNumber(&x, &count);
printf("Sum of array is %d", sumOfInteger(&x, &count));
return (EXIT_SUCCESS);
}
void inputIntegerNumber(int* a, int* count ){
do{
printf("Please! input numbers: ");
scanf("%d", a);
*count++;
}while((*a != 0) && (*count != MAX_ITEMS));
}
int sumOfInteger(int* n, int* count){
int sum = 0;
for (int i = 0; i < *count; i++)
sum += *n;
return sum;
}
我不知道它有什么问题吗?它没有给我一个同样的结果......
答案 0 :(得分:1)
有一些问题,比如 -
inputIntegerNumber(&x, &count);
printf("Sum of array is %d", sumOfInteger(&x, &count));
在两次调用中,您都会传递&x
,但x
是一个int
数组,您的函数期望int *
不是int (*)[]
。这至少应该给出一个错误。
对于这两个函数,您可以直接传递数组x
。
在你的函数中inputIntegerNumber
这个 -
*count++;
您需要增加count
的值,因此它应该是(*count)++
。首先取消引用然后递增值。
答案 1 :(得分:1)
您在代码中犯了一些错误,例如将指针传递给指针&x
(因为数组基本上是指向某个内存位置的指针)并一次又一次地覆盖同一位置。在scanf("%d", a);
中,您一次又一次地覆盖第一个位置而不更改输入循环中的a
。您需要了解数组及其用法。在sumOfInteger
函数中,您也没有更改n
的值。我改变了你的代码,我能够看到所需的输出。
#include <stdio.h>
#include <stdlib.h>
const int MAX_ITEMS = 50;
void inputIntegerNumber(int* a, int* count);
int sumOfInteger(int* n, int* count);
int main(int argc, char** argv) {
int x[MAX_ITEMS], count = 0; // zero elements in array
inputIntegerNumber(x, &count);
printf("Sum of array is %d", sumOfInteger(x, &count));
return (EXIT_SUCCESS);
}
void inputIntegerNumber(int* a, int* count ){
int aIndex = 0;
do{
printf("Please! input numbers: ");
scanf("%d", &a[aIndex]);
aIndex++;
}while((a[aIndex-1] != 0) && (aIndex != MAX_ITEMS));
*count = aIndex;
}
int sumOfInteger(int* n, int* count){
int sum = 0;
for (int i = 0; i < *count; i++)
sum += n[i];
return sum;
}
当我运行它时,我可以看到:
~/Documents/src : $ ./a.out
Please! input numbers: 1
Please! input numbers: 2
Please! input numbers: 3
Please! input numbers: 0
Sum of array is 6
答案 2 :(得分:0)
你的事情太复杂了。在您坐下来编写程序之前,请始终写下必须完成的一般步骤
以下是修订后的计划
#include <stdio.h>
#include <stdlib.h> /* for strtol */
#define DIE(msg) fprintf(stderr, "%s", msg); exit(EXIT_FAILURE)
int main(int argc, char *argv[])
{
int *nums;
if (argc <= 1)
DIE("Usage: [int-list]\n");
/* skip program name */
--argc;
++argv;
nums = malloc(argc * sizeof(int));
if (!nums)
DIE("Out of mem\n");
for (int i = 0; i < argc; ++i) {
char *end;
double val = strtol(argv[i], &end, 0);
if (end == argv[i]) /* no digits detected */
DIE("Usage: [int-list]\n");
nums[i] = val;
}
printf("%d\n", add(nums, argc));
free(nums);
}
int add(int arr[], size_t n)
{
int sum = 0;
for (int i = 0; i < n; ++i)
sum += arr[i];
return sum;
}
完成strtol
错误处理是OP的练习。