【发布时间】:2013-08-10 07:39:53
【问题描述】:
在我的代码中:
int nAlunos, nNotas;
/*size input*/
scanf("%d", &nAlunos);
scanf("%d", &nNotas);
/*arrays*/
int ordenador [nAlunos];
char listaNomes [nAlunos][16];
float listaNotas [nAlunos][nNotas+1];
/*non-arrays*/
int i, k;
/*input*/
for(i = 0; i < nAlunos; i++){
scanf("%s", listaNomes[i]);
for(k = 1; k <= nNotas; k++){
scanf("%f", &listaNotas[i][k]);
}
}
/*sum of grades / number os grades for each person*/
for(i = 0; i < nAlunos; i++){
listaNotas[i][0] = 0;
for(k = 1; k <= nNotas; k++)
listaNotas[i][0] += listaNotas[i][k];
listaNotas[i][0] /= nNotas;
}
/*process order on vector*/
for(i = 0; i < nAlunos; i++){
menor = 1111;
for(k = i; k < nAlunos; k++)
if (listaNotas[k][0] < menor)
menor = listaNotas[k][0];
for(k = i; listaNotas[k][0] != menor; k++){}
ordenador[k] = i;
ordenador[i] = k;
}
for(i = 0; i < nAlunos; i++)
printf("%d", ordenador[i]);
}
我正在尝试从用户那里填充数据表,我可能不会对此类使用指针。
它需要接收呈现的数据:
String1
float1 float2...
String2
.
.
.
运行它时,它运行良好,直到我完成最后一个输入。之后它只是中断执行并返回我分段错误:11
我试图找到它可能在哪里访问不正确的内存,但这对我来说没有意义,因为我找不到它。
【问题讨论】:
-
我不能使用动态分配,我需要listaNotas[i][0]作为其他方式,所以我不会写它。
-
所以你的程序在你上面发布的内容之后中断了一段时间?那你为什么不把剩下的展示出来呢? (@Joni:VLA 是完美的 C.)
-
这段代码在 GCC 上运行良好。
-
为什么是
scanf("%s", listaNomes[i])而不是scanf("%s", listaNomes[i*16])? (查看您对数组listaNomes的定义) -
欢迎来到 Stack Overflow。请尽快阅读About 页面。在这种情况下,创建 SSCCE (Short, Self-Contained, Correct Example) 是个好主意;更容易看出出了什么问题。获取有关您正在输入的数据的信息也将有所帮助。您没有检查来自
scanf()的返回值以确保转换正常(但您应该)。您没有限制输入量(您应该使用"%15s"来读取字符串以确保没有缓冲区溢出。但是,给定有效数据,到目前为止应该没问题。
标签: c arrays sorting segmentation-fault scanf