我有一个c的练习

时间:2017-04-22 15:32:52

标签: c arrays

我的练习是键盘输入列表整数,程序结束为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;
}

我不知道它有什么问题吗?它没有给我一个同样的结果......

3 个答案:

答案 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的练习。