数组并初始化多个计数器 #包括 int main(){ int-niz[100],i,j,k,l; j=0;//k=l=0; printf(“非现场niz(-1表示结束)”); 做{ scanf(“%d”、&niz[i]); 如果(niz[i]%5==0) j++; //如果(niz[i]%7==0)k++; //如果(niz[i]%11==0)l++; }而(niz[i]!=-1); printf(“Broj djeljivih sa 5 je:%d”,j); //printf(“Broj djeljivih sa 7 je:%d”,k); //printf(“Broj djeljivih sa 11 je:%d”,l); 返回(0); }
这段代码有什么问题,它可以处理注释,但当我取消选中注释时,它会导致崩溃。我要解决的问题是,有多少数字可以除以5、7和11。垃圾值@variable数组并初始化多个计数器 #包括 int main(){ int-niz[100],i,j,k,l; j=0;//k=l=0; printf(“非现场niz(-1表示结束)”); 做{ scanf(“%d”、&niz[i]); 如果(niz[i]%5==0) j++; //如果(niz[i]%7==0)k++; //如果(niz[i]%11==0)l++; }而(niz[i]!=-1); printf(“Broj djeljivih sa 5 je:%d”,j); //printf(“Broj djeljivih sa 7 je:%d”,k); //printf(“Broj djeljivih sa 11 je:%d”,l); 返回(0); },c,arrays,C,Arrays,这段代码有什么问题,它可以处理注释,但当我取消选中注释时,它会导致崩溃。我要解决的问题是,有多少数字可以除以5、7和11。垃圾值@variableI。因此,您正在尝试访问数组的未索引部分 初始化i=0 确保循环在再次到达数组末尾之前结束 do { //你想干什么都行 } 由于所有变量i、j、k、l都是自动(存储类)整数,因此(niz[i]!=-1&&i,默认情况下,这些变量将具有不确定的(未指定的值或陷阱表示)值。 因此,您需要显式初始化变量 而且, 在代码中,您没有增加“i”的值,那么使用数组
I
。因此,您正在尝试访问数组的未索引部分
i=0代码>
do
{
//你想干什么都行
}
由于所有变量i、j、k、l都是自动(存储类)整数,因此(niz[i]!=-1&&i,默认情况下,这些变量将具有不确定的(未指定的值或陷阱表示)值。
因此,您需要显式初始化变量
而且,
在代码中,您没有增加“i”的值,那么使用数组有什么意义呢。
所有输入编号将存储在niz[i](其中“i”可能是有效索引,也可能不是有效索引),因此每个新输入将覆盖前一个输入
我发现以下链接对于您的问题非常有用
#include <stdio.h>
int main() {
int niz[100], i, j, k, l;
j = 0; // k=l=0;
printf("Unesite niz (-1 for end)");
do {
scanf("%d", &niz[i]);
if (niz[i] % 5 == 0)
j++;
// if(niz[i]%7==0) k++;
// if(niz[i]%11==0) l++;
} while (niz[i] != -1);
printf("Broj djeljivih sa 5 je:%d", j);
// printf("Broj djeljivih sa 7 je:%d",k);
// printf("Broj djeljivih sa 11 je:%d",l);
return (0);
}
如果初始化i
,会发生什么情况?这种奇怪、不可靠的行为在未初始化的变量处于中心位置时非常常见,我不知道您的scanf()在哪里
正在编写。要调试此类问题,请查看valgrind等工具,该工具可分析可能的内存损坏。请缩进代码,使其更具可读性。此外,如果注释和变量名为英语,我们将更容易理解。
http://stackoverflow.com/questions/6212921/is-un-initialized-integer-always-default-to-0-in-c