我进行了一次练习,然后需要读取用户想要的任意数量的数字,并显示较高的数字和被读取的次数。我试图构建代码,并在我的脑海中认为它应该可以工作,但是当显示数字等时,它显示了一些“随机数”,而不是我的变量“ max”。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int aux1, j, i,k, max = -99999,cont;
printf("How many numbers will be read: \t");
scanf("%d", &aux1);
int vet[aux1];
for(k=0;k<aux1;k++){
printf("Digit a number: \t");
scanf("%d",&vet[k]);
}
for(i = 0 ; i<10 ; i++){
if(vet[i] > max) max=vet[i];
}
cont=1;
j=0;
while(j<=aux1){
if(max==vet[j]){
cont++;
}
j++;
}
printf(" The higher number is %d and it was read %d times \n", max, cont);
system("pause");
return 0;
}
如果我在屏幕上输入要读取3个数字的示例,然后输入1、2和3,则输入较高的数字是“ 1954048954”,并被读取1次,此时应输入“ 3”是较高的数字,它被读取了1次”
答案 0 :(得分:4)
您正在阅读数组末尾的内容:
for(i = 0 ; i<10 ; i++){
if(vet[i] > max) max=vet[i];
}
如果您为aux1
输入3,则vet
是一个由3个数字组成的数组,但是在这里您将遍历10个数组元素。这将读取数组末尾,并调用undefined beahvior。
将循环固定为数组大小之内:
for(i = 0 ; i<aux1 ; i++){
if(vet[i] > max) max=vet[i];
}
在计算max元素时,您在这里也遇到类似的问题:
while(j<=aux1){
if(max==vet[j]){
cont++;
}
j++;
}
您在这里遇到一个错误,您的循环条件应改为:
while(j<aux1){