Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - sinatra

#1
Programación C/C++ / [DUDA] gets(cadena)
29 Septiembre 2012, 19:32 PM
Hola amigos, tengo una duda con el siguiente programa:

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 (cpp) [Seleccionar]
#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 (cpp) [Seleccionar]
*gets(string)
en la linea 13, pero mas o menos estudiando llegué a la Conclusión de que escribir:
Código (cpp) [Seleccionar]
while(*gets(string)) {
es equivalente a escribir:
Código (cpp) [Seleccionar]
gets(string);
cin.sync();
while(*string) {                   //donde *string es equivalente a string[0]

entonces me propuse reemplazar el codigo de la linea 13 a la linea 20 del programa resualto por el siguiente codigo:
Código (cpp) [Seleccionar]
    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();
        }

La variable *intptr dentro la funcion convertir() apunta a la variable valor de la funcion main().
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...
#2
Programación C/C++ / ¿ Como utilizar %n ?
29 Septiembre 2012, 19:30 PM
Hola, me pueden ayudar a utilizar el especificador de formato %n, he buscado en google, pero solo dicen como utilizar otros especificadores de formato, y no %n

De antemano gracias

Saludos.