我正在写记录和非递归二进制搜索的代码。我在使用二进制搜索时遇到了问题,因为当我尝试这样做时,打印值 未正确接收到我的命令(数组已排序),并且我不知道可能存在什么错误
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void registro();
void consultaprestamo();
struct datos {
int numprestamo;
char nombre[10];
char direccion[10];
int telefono;
int importesoli;
}
datos[10];
int x = 0;
char busqueda;
char auxn[10];
int j, k, aux;
int inf, sup, mit, dato, n = 20;
int nucontrol;
int main(void) {
char opcion;
do {
printf("A) people registration\n");
printf("D) Specific consultation for loans\n");
printf("F)exit\n");
printf("Opcion: ");
scanf("%s", &opcion);
switch (opcion) {
case 'A':
registro();
break;
case 'D':
consultaprestamo();
break;
}
} while (opcion != 'F');
}
记录数据
void registro() {
char continuar;
do {
printf("\n*****************\n");
printf("Loan number: ");
scanf("%d", & datos[x].numprestamo);
printf("Name: ");
scanf("%s", datos[x].nombre);
printf("adress: ");
scanf("%s", datos[x].direccion);
printf("number phone: ");
scanf("%d", & datos[x].telefono);
printf("Amount requested: ");
scanf("%d", & datos[x].importesoli);
x++;
printf("Enter another record? y/n: ");
scanf("%s", &continuar);
} while (continuar != 'n');
}
二分查找
void consultaprestamo() {
for (k = 1; k < x; k++) {
for (j = 0; j < x - 1; j++) {
if (datos[j].numprestamo > datos[j + 1].numprestamo) {
aux = datos[j].numprestamo;
datos[j].numprestamo = datos[j + 1].numprestamo;
datos[j + 1].numprestamo = aux;
aux = datos[j].telefono;
datos[j].telefono = datos[j + 1].telefono;
datos[j + 1].telefono = aux;
aux = datos[j].importesoli;
datos[j].importesoli = datos[j + 1].importesoli;
datos[j + 1].importesoli = aux;
strcpy(auxn, datos[j].nombre);
strcpy(datos[j].nombre, datos[j + 1].nombre);
strcpy(datos[j + 1].nombre, auxn);
strcpy(auxn, datos[j].direccion);
strcpy(datos[j].direccion, datos[j + 1].direccion);
strcpy(datos[j + 1].direccion, auxn);
}
}
}
for (j = 0; j < x; j++) {
printf("loan number: %d\n", datos[j].numprestamo);
printf("phone number: %d\n", datos[j].telefono);
printf("Import requested: %d\n", datos[j].importesoli);
printf("\nName: %s\n", datos[j].nombre);
printf("adress: %s\n", datos[j].direccion);
}
inf = 0;
sup = j;
printf("write the number control");
scanf("%d", & nucontrol);
while (inf <= sup) {
mit = (inf + sup) / 2;
if (datos[mit].numprestamo == nucontrol) {
printf("dato %d encontrado posicion %d\n", nucontrol, mit);
printf("loan number: %d\n", datos[j].numprestamo);
printf("phone number: %d\n", datos[j].telefono);
printf("Import requested: %d\n", datos[j].importesoli);
printf("\nName: %s\n", datos[j].nombre);
printf("adress: %s\n", datos[j].direccion);
break;
}
if (datos[mit].numprestamo > nucontrol) {
sup = mit;
mit = (inf + sup) / 2;
}
if (datos[mit].numprestamo < nucontrol) {
inf = mit;
mit = (inf + sup) / 2;
}
}
}
我试着用有序数组的for嵌套while,但我做不到,我还试着对变量做了几次更改。
1条答案
按热度按时间nlejzf6q1#
当试图查找不存在的元素时,您的代码将导致无限循环。请尝试以下操作: