我已经编写了这样的c程序,希望得到正确的输出。
Settings
但是我得到随机值。这个程序出了什么问题? 尝试输入尝试次数,然后输入值,然后打印这些值的添加。
P.S 这里的数组初始化是动态的。它有效吗?如果不是正确的方法是什么?
答案 0 :(得分:2)
当您声明长度为10
的数组时,索引从0
到9
。该数组没有索引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指向其声明的时间)。有时程序会显示一些随机值,有时它会在访问超出范围的内存时崩溃。