gpt4 book ai didi

c - 此 C 代码有问题

转载 作者:行者123 更新时间:2023-11-30 21:09:48 25 4
gpt4 key购买 nike

我构建了一个 C 代码来自动应用 D'Hondt 定律。所以我用 C 语言,使用 NetBeans 8.0.2 来做。我正在尝试编译它(没有错误),它给出了此消息 RUN FAILED (exit value 1, total time: 4s) 。我查了很多次都没有结果,所以才来这里问。我会很感激一些帮助。 已解决

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int LerDeputados() {
int d;
printf("Indique o número de deputados a repartir: ");
scanf("%d",&d);
return d;
}

int LerPartidos() {
int n;
printf("Introduza o número de partidos: ");
scanf("%d",&n);
return n;
}

int main(void) {
int d, n, i, k, m, j, z, x, aleatorio, b, dip[1000];
float e[1000][1000], maximo[1000], v[1000];
d= LerDeputados();
n= LerPartidos();

srand(time(NULL));
aleatorio=rand();

do{
i++;
printf("Número de votos do %dº partido: ",i);
scanf("%f",&v[i]);
}while(i<n);

for(j=1;j<=d;j++){
for(k=1;k<=i;k++){
e[j][k]=v[k]/j;
}
}
for(x=1;x<=n;x++) {
dip[x]=0;
}

for(m=1;m<=d;m++){
maximo[m]=0;
for (j=1;j<=d;j++) {
for (k=1;k<=i;k++) {
if (e[j][k]>maximo[m]) {
maximo[m] = e[j][k];
z=j;
x=k;

}
else if (maximo[m]==e[j][k]) {
if(v[k]>v[x]) {
maximo[m] = e[j][k];
z=j;
x=k;
}
else if(v[k]<v[x]) {
}
else {
if(aleatorio%2==0){
maximo[m] = e[j][k];
z=j;
x=k;
}
}
}
}
}
dip[x]=dip[x]+1;
e[z][x]=0;
}

printf("\n");

for(b=1;b<=n;b++) {
printf("\nO partido %d acadou %d diputados.",b,dip[b]);
}

return 0;
}

如何将此代码实现为在 main 上运行的函数?

 for(m=1;m<=d;m++){
maximo[m]=0;
for (j=1;j<=d;j++) {
for (k=1;k<=i;k++) {
if (e[j][k]>maximo[m]) {
maximo[m] = e[j][k];
z=j;
x=k;

}
else if (maximo[m]==e[j][k]) {
if(v[k]>v[x]) {
maximo[m] = e[j][k];
z=j;
x=k;
}
else if(v[k]<v[x]) {
}
else {
if(aleatorio%2==0){
maximo[m] = e[j][k];
z=j;
x=k;
}
}
}
}
}
dip[x]=dip[x]+1;
e[z][x]=0;
}

最佳答案

两个问题:

首先,main 中有一些非常大的数组,它们分配在堆栈上。这可能会导致堆栈溢出问题。

要么将这些大数组声明为全局数组,要么使用malloc动态分配它们。

第二个问题是进入第一个 do...while 循环时,i 未初始化。该值可以是任何值,因此可能会导致索引超出数组 v 的末尾,从而导致未定义的行为。这就是导致您的程序崩溃的原因。事实上,在改变数组的大小后它没有崩溃是幸运的。对代码的任何其他更改都可能导致崩溃重新出现。

i 设置为 0,应该没问题。

i=0;
do{
i++;
printf("Número de votos do %dº partido: ",i);
scanf("%f",&v[i]);
}while(i<n);

编辑:

关于使您提到的代码块成为函数,请将 main 中定义的仅在此 block 中使用的所有变量移至该函数,并传入 main 使用。

关于c - 此 C 代码有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33531976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com