C语言 我的程序输出了10个随机数中的2个,其他8个都是正常的,但是我看不出问题

v09wglhw  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(80)

我的程序应该看看用户号码是否是他们可用的号码(35-44),然后返回号码(35-44)以及从10个可用号码中选择它们的人的百分比。
我已经试过了一切,好像它是正常的,但数字35和36是给我随机的百分比数字每一次。数字37-44给了我正常的百分比数字,所以我真的不明白发生了什么
输出应该是这样的:

tamanho 36 – percentual: 20
tamanho 37 – percentual: 10
tamanho 38 – percentual: 0
tamanho 39 – percentual: 0
tamanho 40 – percentual: 0
tamanho 41 – percentual: 0
tamanho 42 – percentual: 10
tamanho 43 – percentual: 0
tamanho 44 – percentual: 30
#include <stdio.h>
int tamanVeri(int taman,int vTam[]){
  int porc,i;
  for(i=0;i<10;i++){
    if(taman==vTam[i]){
      return i;
    }
  }
  return 0;
}
void showTamanPorc(int vTam[],int vAp[],int vezRepetCSucesso){
  int i;
  float porc;
  for(i=0;i<10;i++){
    porc=((float)vAp[i]/(float)vezRepetCSucesso)*100.0;
    printf("Tamanho:  %i - Porcentagem: %.2f\n",vTam[i],porc);
  }
  
}
int main(void) {
  int vAp[10];
  int vTam[10]={35,36,37,38,39,40,41,42,43,44};
  int tamanho,i=0,j=0,k,adicEm;
  printf("Ponha o tamanho do tênis\nEntre 35 e 44\n");
  scanf("%i",&tamanho);
  while(tamanho!=0&&tamanho>0){
    adicEm=tamanVeri(tamanho,vTam);
    if(adicEm!=0){
      vAp[adicEm]++;
    }
    j++;
    printf("Ponha o tamanho do tênis\nEntre 35 e 44\n");
    scanf("%i",&tamanho);
  }
  showTamanPorc(vTam,vAp,j);
  return 0;
}
xv8emn3q

xv8emn3q1#

你的线性搜索函数(tamanVeri)在失败时返回0,并成功地找到整数作为数组的第一个元素。失败时应该返回一些无效的索引(例如,-1),并更改所使用的比较:

if (adicEm != -1)

int vAp[10];是未初始化的数组。它包含的值是 * 不确定的 *(实际上是随机的)。使用不确定的值(如vAp[adicEm]++;)将调用Undefined Behaviour
初始化数组以包含所有零:

int vAp[10] = { 0 };

相关问题