C/Visual C - run-time error M6107: MATH

 
Vista:

run-time error M6107: MATH

Publicado por Felmolpa (2 intervenciones) el 12/09/2001 14:48:11

El problema es el siguiente: soy programador de C y programo Han Held´s, tengo la rutina mas absurda y sencilla de la vida y me da ese error, en una pc me corre perfecto, pero a la hora de pasarlo al HH se cae, en ese preciso lugar, talvez ustedes como son mas expertos en C me puedan decir cual es mi error, tengo agregada la libreria de math.h por aquello, y a continuacion pongo la rutinilla, y de antemano gracias.

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

void main()
{
double aux;
int num=0;
char str[6];

clrscr();
strcpy(str,"0.50");

aux=atof(str);
printf("[%s]",str);getch();
if (aux>=0 && aux<=25) //aca se cae el programa y me da el error
if (num==0 && aux==0)
printf("[%s]",str);
else
printf("[%.2f]",aux);
getch();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problemas con conversión de cadenas a números en C en hanheld

Publicado por Alejandro (913 intervenciones) el 12/10/2024 00:17:14
El problema que estás experimentando puede deberse a varias razones, especialmente al entorno en el que se está ejecutando tu código. Aquí hay algunas consideraciones y posibles soluciones:

1. Verificación de la función `atof`



La función `atof` convierte una cadena a un número de punto flotante. Si la cadena no es válida, puede devolver 0.0, lo que podría causar problemas si no se maneja adecuadamente. Asegúrate de que la cadena que estás pasando a `atof` sea válida.

2. Verificación de rango



El rango que estás verificando (`aux >= 0 && aux <= 25`) es correcto, pero asegúrate de que `aux` realmente contenga un valor válido. Puedes agregar un chequeo adicional para ver si `aux` es un número válido:

1
2
3
if (aux >= 0 && aux <= 25) {
    // Resto del código
}

3. Uso de `clrscr` y `getch`



Las funciones `clrscr` y `getch` son específicas de ciertos compiladores y pueden no estar disponibles o comportarse de manera diferente en otros entornos. Asegúrate de que estas funciones sean compatibles con el entorno de tu dispositivo.

4. Revisar el tamaño del arreglo `str`



El tamaño del arreglo `str` es 6, lo cual es suficiente para almacenar "0.50" y el carácter nulo. Sin embargo, asegúrate de que no haya desbordamientos en otras partes del código.

5. Código modificado



Aquí tienes una versión ligeramente modificada de tu código con algunas verificaciones adicionales:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
 
void main() {
    double aux;
    int num = 0;
    char str[6];
 
    clrscr();
    strcpy(str, "0.50");
 
    aux = atof(str);
    printf("[%s]", str);
    getch();
 
    // Verificar si aux es un número válido
    if (aux >= 0 && aux <= 25) {
        if (num == 0 && aux == 0) {
            printf("[%s]", str);
        } else {
            printf("[%.2f]", aux);
        }
    } else {
        printf("El valor de aux está fuera del rango permitido.");
    }
 
    getch();
}

6. Depuración



Si el programa sigue fallando, intenta agregar más mensajes de depuración para ver el valor de `aux` antes de la verificación del rango. Esto te ayudará a identificar si el problema está en la conversión de la cadena o en la lógica posterior.

7. Entorno de ejecución



Dado que mencionas que el programa funciona en una PC pero falla en el dispositivo hanheld, asegúrate de que el entorno de ejecución (compilador, sistema operativo, etc.) sea compatible y que no haya diferencias en la configuración que puedan estar causando el problema.

¡Buena suerte, Felmolpa!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar