为什么此C程序的输出不正确

时间:2015-10-24 10:19:44

标签: c

我已经编写了这样的c程序,希望得到正确的输出。

Settings

但是我得到随机值。这个程序出了什么问题? 尝试输入尝试次数,然后输入值,然后打印这些值的添加。

P.S 这里的数组初始化是动态的。它有效吗?如果不是正确的方法是什么?

3 个答案:

答案 0 :(得分:2)

当您声明长度为10的数组时,索引从09。该数组没有索引10

在您的代码中,您的数组大小为t-1

int a[t-1], b[t-1];

因此,在您的第一次迭代中,scanf()printf()语句访问a[t-1],这不存在。而且,由于它是do while循环,因此保证至少运行一次。

访问其边界外的数组是Undefined behavior。所以,正如Cool Guy在评论中指出的那样,任何事情都可能发生。

答案 1 :(得分:1)

在阅读所有值和打印所有值之间,您永远不会将t重置为原始值。您需要这样做,可能使用另一个变量来保存它的原始值。

答案 2 :(得分:0)

数组大小应该是常量,不能在运行时设置。对于运行时内存分配,您需要将指针变量与malloc函数一起使用。首先,您需要在声明时为变量t分配一个常量值。

只是一个提示,总是尝试在任何语句之前声明和初始化变量。数组初始化应该在scanf之前,通过这样做你可以清楚地看到问题,即你正在分配内存(一些随机),然后从用户获取值。编译器必须做类似的事情,分配一些随机大小的内存,然后得到值t,现在这个值t将只用于你的迭代而不是数组分配,因为数组之前用一些rand大小分配(什么垃圾值t指向其声明的时间)。有时程序会显示一些随机值,有时它会在访问超出范围的内存时崩溃。