c - 仅使用 stdio 库,简单的 "for"命令不起作用

标签 c arrays std stdio dynamic-arrays

使用与我的其他问题中提到的相同的机器和 IDE(第三段位于 Problems in code or my IDE/comp is bugged? )

我尝试运行此代码:

#include <stdio.h>
#define n 3
int main()
{
    int i;
    float values[n],sumval,svmean,tmp;
    for(i=0;i<n;++i)
    {
        scanf("%f",&tmp);
        values[i]=tmp;
        sumval = sumval + values[i];
    }
    svmean = sumval/n;
    printf("%f \n",svmean);
    return(0);
}

上面的代码应该运行这个公式

http://img850.imageshack.us/img850/6894/95871186.jpg

这意味着它必须添加一些值并将结果除以它们的总数。

正如您在上面看到的,我创建了一个包含随机 n 个位置的数组,并要求用户为每个位置填写一个值,然后将它们全部相加并除以它们。

问题是它不起作用。无论输入是什么,它都只输出结果7。

但是如果我将 stdlib.h 包含到代码中,它就可以正常工作。

所以

  • 问题 A:为什么仅使用 stdio.h 库?代码的哪个元素确实需要 stdlib.h 图书馆?

正如你所看到的,数组 values[n] 似乎有一个随机的 n 个单元格,但实际上我已经将这个数字设置为等于 3 (使用#define)

  • 问题 B:是否有一种方法可以使用相同的函数运行代码,但让用户定义数组 values[n] 或其他数组的大小Words 让用户输入一个整数来设置 values[n] 中的 n 的值?

最佳答案

首先,您忘记初始化sumval。您希望它的开头为 0

如果您希望在运行时决定数组的大小,则必须使用 malloc 动态分配它,例如如下所示:

int n;
float *values,sumval=0,svmean,tmp;
scanf("%d", &n);
values = (float *) malloc (n * sizeof(float));

稍后,您应该通过调用free释放分配的内存:

free(values);

关于c - 仅使用 stdio 库,简单的 "for"命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13988573/

相关文章:

c++ - std::min() 参数中的计算是否会产生计算开销?

c++ - 在 C 中的 16 字符数组中连接 32 位 int block

c - 为什么在 GCC 编译运行正常时 GDB 显示段错误

php - PDO 向 MySQL 数据库中插入一个简单的数组

php - 无论输入复选框数组中的值 =""(是否为空)均已检查

C++ std::set 插入时读取无效

c++ - std:sort 与插入 std::set

c - char[] 的初始化并使用它。我不想使用 "string"

c - 适当的外部变量声明和定义

javascript - 如何在 JavaScript 中创建高性能、不可变的数组?