请注意以下代码。我想将金额除以数组中最后一个元素的值。我已经尝试过以下方式,但它无法正常工作。任何人都可以告诉我这样做的正确方法是什么?
#include<stdio.h>
int main()
{
int i, j, k, noteNumber, array[100], amount, result;
printf("Enter the number of the notes: \n");
scanf("%d", ¬eNumber);
printf("Enter the value of %d notes: \n", noteNumber);
for(i = 0; i < noteNumber; i++){
scanf("%d", &array[i]);
}
printf("Enter the amount: \n");
scanf("%d", &amount);
i = j;
if(amount / array[j] == 0){
printf("Minimum %d number of is needed", (amount/array[j]));
printf("The value of each note is %d", array[j]);
}
}
答案 0 :(得分:3)
我可以看到
i = j;
错误,因为您正在使用未初始化变量的值来分配给另一个。这没有任何意义,可以导致undefined behavior。
C数组使用基于0的索引,因此对于大小为n
的数组,最后一个索引为n-1
。
也就是说,永远不要对静态定义的数组使用未绑定索引,在使用索引之前总是执行绑定检查。
答案 1 :(得分:2)
如果noteNumber
是数组的大小,那么最后一个元素将是
array[noteNumber - 1]
据我所知,j
甚至没有初始化?
答案 2 :(得分:1)
你有一条线
i = j;
j
甚至没有初始化,所以你在这里犯了一个错误,也许是什么
你想要的是
j = i - 1
由于i
循环中noteNumber
会增加到for
,而元素数量n
的数组的最后一个元素索引n-1
因为索引从0
而非1。
如此正确的代码将
#include<stdio.h>
int main(){
int i, j, k, noteNumber, array[100], amount, result;
printf("Enter the number of the notes: \n");
scanf("%d", ¬eNumber);
printf("Enter the value of %d notes: \n", noteNumber);
for(i = 0; i < noteNumber; i++){
scanf("%d", &array[i]);
}
printf("Enter the amount: \n");
scanf("%d", &amount);
j = i - 1; // Line Changed
if(amount / array[j] == 0){
printf("Minimum %d number of is needed", (amount/array[j]));
printf("The value of each note is %d", array[j]);
}
}