提问人:akaay 提问时间:6/26/2023 更新时间:6/26/2023 访问量:36
重复时代码不打印值 [duplicate]
Code do not print values when are repeated [duplicate]
问:
我正在为学校使用 C 代码,该程序应该提取浮点值的数组 N 并确定它们之间距离最短的对;当只有一对最接近的数字时,代码会正确打印它,但是,当有更多数字(2 或 +)时,根本不会在结果部分打印任何内容(我的意思是,其他句子,如“键入文件名”仍然存在,但“结果”丢失)。
我该如何解决我?
代码是西班牙语的,但我会添加翻译
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main() {
char file_name[100];
int n, i;
printf("\tEscriba el nombre del archivo:\n"); //Type file name
scanf("%s", file_name);
FILE *archivo = fopen(file_name, "r"); //archivo means file
if (archivo == NULL) {
printf("No se pudo abrir el archivo.\n"); //File error
return 1;
}
//sacar el valor de n contandoi los elemntos
float value;
n = 0;
while (fscanf(archivo, "%f\n", &value) != EOF) {
n++;
}
rewind(archivo); //inciio
float a[n];
for (int i = 0; i < n; i++) {
fscanf(archivo, "%f\n", &a[i]);
}
fclose(archivo); //cerrar owo
//algoritmo de selección para el orden :3
for (int i = 0; i < n - 1; i++) {
int maxIndex = i;
for (int j = i + 1; j < n; j++) {
if (a[j] > a[maxIndex]) {
maxIndex = j;
}
}
float temp = a[i];
a[i] = a[maxIndex];
a[maxIndex] = temp;
}
//valores ordenados
printf("\nValores ordenados de mayor a menor:\n"); //Values sorted from + to -
for (int i = 0; i < n; i++) {
printf("%.2f, ", a[i]);
}
printf("\n");
int distanceSize = n - 1;
float distancia[distanceSize]; //distancia means distance (between pair of numbers)
// distancia directa lineal pq si no revuelve todo
printf("\nDistancia: \n"); //Distance
for (i = 0; i < distanceSize; i++) {
distancia[i] = a[i] - a[i + 1];
printf("%.2f, ", distancia[i]);
}
//ordenar distancia
for (i = 0; i < distanceSize; i++) {
for (int j = 0; j < distanceSize - i - 1; j++) {
if (distancia[j] > distancia[j + 1]) {
float temp = distancia[j];
distancia[j] = distancia[j + 1];
distancia[j + 1] = temp;
}
}
} //burbuja pq nu me salió el otro aquí
printf("\n\nValores ordenados de la distancia:\n"); //Sorted distance values
for (i = 0; i < distanceSize; i++) {
printf("%.2f, ", distancia[i]);
}
float min = distancia[0];
// printf("\n%.2f\n", distancia[0]);
printf("\n\nDistancia Min: %.2f\n", min);
printf("\nPARES CERCANOS\n"); //CLOSEST PAIRS (HERE IS WHERE IT PRINTS NOTHING WHEN THERE ARE MORE THAN 1 PAIR WITH THE SAME DISTANCE)
for (i = 0; i < n; i++) {
if (a[i + 1] - a[i] == min) {
printf("(%.2f, %.2f)", a[i], a[i + 1]);
}
}
return 0;
}
答:
0赞
Vlad from Moscow
6/26/2023
#1
This for 循环
for (i = 0; i < n; i++) {
if (a[i + 1] - a[i] == min) {
printf("(%.2f, %.2f)", a[i], a[i + 1]);
}
}
当 等于 时,由于表达式 而导致访问数组外部的内存。a
i
n - 1
a[i + 1]
循环的第二个问题是,当数组按降序排序时,表达总是有一个非正值,而总是一个非负值。a
a[i + 1] - a[i]
min
重写循环,如
for ( i = 1; i < n; i++) {
if (a[i - 1] - a[i] == min) {
printf("(%.2f, %.2f)", a[i - 1], a[i]);
}
}
评论
{6.0 , 5.6, 1.9 , 2.3}
qsort
fabs