El problema propuesto es el siguinte:
Realizar un programa que tenga una funcion para convertir una cadena de caracteres numericos a un numero entero. Donde:
- La entrada debe ser un puntero a cadena de caracteres
- La salida tendrá dos parametros:
1. El primero será un puntero a entero que tomará el valor de la conversion a entero.
2. El segundo será el valor retornado por la funcion y tomará los siquientes valores:
1 si la cadena se compone exclusivamemte de caracteres numéricos precedidos de un signo menos o un signo
más (aunque no necesariamente).
0 si lo anterio no se cumple, en este caso envia un aviso de error.
El problema lo encontré ya resuelto y es el siguiente:
Código
#include"iostream.h" #include"stdio.h" long convertir (char *string, long *intptr); int main() { char string[10]; long valor; printf("Ingrese digitos numericos:\n"); printf("Termine digitando <<ENTER>>:\n"); while(*gets(string)) { //mientras el primer caracter que ingresaste es verdadero if(convertir(string, &valor)) printf("Cadena %s convertida a entero: %ld\n", string, valor); else printf("Cadena %s no se puede convertir a entero\n", string); printf("\nIngrese digitos numericos: \n"); printf("Termine digitando <<ENTER>>:\n"); } return 0; } long convertir(char *string, long *intptr) { int signo; *intptr=0; if(*string=='-' || *string=='+'){ signo=(*string=='-')? -1: 1; string++; } while(*string>='0' && *string<='9'){ *intptr=10*(*intptr) + (*string-'0'); string++; } if(*string=='\0'){ *intptr=signo *(*intptr); return 1; } else return 0; }
El problema esta resuelto correctamente, pero hace un momento no entendia que significaba:
Código
en la linea 13, pero mas o menos estudiando llegué a la Conclusión de que escribir:
*gets(string)
Código
es equivalente a escribir:
while(*gets(string)) {
Código
entonces me propuse reemplazar el codigo de la linea 13 a la linea 20 del programa resualto por el siguiente codigo:
gets(string); cin.sync(); while(*string) { //donde *string es equivalente a string[0]
Código
La variable *intptr dentro la funcion convertir() apunta a la variable valor de la funcion main().
gets(string); cin.sync(); while(*string) { //mientras el primer caracter que ingresaste es verdadero if(convertir(string, &valor)) printf("Cadena %s convertida a entero: %ld\n", string, valor); else printf("Cadena %s no se puede convertir a entero\n", string); printf("\nIngrese digitos numericos: \n"); printf("Termine digitando <<ENTER>>:\n"); gets(string); cin.sync(); }
En la funcion convertir(), *intptr toma el valor de la cadena de caracteres numericos convertida a entero, y ya que ésta apunta a la variable valor, esta ultima almacena el valor de *intptr, pero al reemplazar el segmento de codigo la variable valor no almacena el valor de *intptr sino que queda con un valor de 0, y con este valor el programa no muestra el resultado que se desea en la proposicion del problema.
Mi duda esta misma; no comprendo por que sucede esto. Cosas como estas son las que no me dejan dormir tranquilo, porque el programa no hace lo que yo intento que haga, que es de lo que se trata esto.
Les agradezco mucho por sus respuestas
NOTA 1: no busco una alternativa para el problema, ya que como ven, el programa ya esta resuelto, entonces pues no me interesa resolverlo, mas bien quiero entender porque sucede esto.
NOTA 2: al fin estoy entendiendo lo importante que son los sitios como estos.
Saludos...