elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: ¿ Como utilizar %n ? en: 29 Septiembre 2012, 22:12 pm

Y no me da bien el resultado, no se por qué.

Bueno, gracias por responder, asi se que no soy el unico al que le pasan estas cosas.
2  Programación / Programación C/C++ / Re: ¿ Como utilizar %n ? en: 29 Septiembre 2012, 20:24 pm
Pero está relacionado con la salida por printf().
En la pagina anterior del lick que me enviaste dice como utilizarlo, ademas pone un ejemplo, pero me parece que el ejemplo no esta bien.

El ejemplo es el siguinte:

Código
  1. int numChars;
  2. float a = 3.14159;
  3. int b = 3490;
  4.  
  5. printf("%f %d%n\n", a, b, &numChars);
  6. printf("The above line contains %d characters.\n", numChars);

Si puedes arreglarlo...gracias.

Ademas tengo una definicion de un libro que habla de la salida por printf() y dice:

%n   :    El argumento asosiado es un putero a entero al que se asigna el numero de
             caracteres escritos hasta que aparece %n

Saludos.
3  Programación / Programación C/C++ / [DUDA] gets(cadena) en: 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
  1. #include"iostream.h"
  2. #include"stdio.h"
  3.  
  4. long convertir (char *string, long *intptr);
  5.  
  6. int main()
  7.    {
  8.    char string[10];
  9.    long valor;
  10.  
  11.    printf("Ingrese digitos numericos:\n");
  12.    printf("Termine digitando <<ENTER>>:\n");
  13.    while(*gets(string)) {          //mientras el primer caracter que ingresaste es verdadero
  14.        if(convertir(string, &valor))
  15.            printf("Cadena %s convertida a entero: %ld\n", string, valor);
  16.        else
  17.            printf("Cadena %s no se puede convertir a entero\n", string);
  18.        printf("\nIngrese digitos numericos: \n");
  19.        printf("Termine digitando <<ENTER>>:\n");
  20.        }
  21.    return 0;
  22.    }
  23.  
  24. long convertir(char *string, long *intptr)
  25.    {
  26.    int signo;
  27.    *intptr=0;
  28.    if(*string=='-' || *string=='+'){
  29.        signo=(*string=='-')? -1: 1;
  30.        string++;
  31.        }
  32.  
  33.    while(*string>='0' && *string<='9'){
  34.        *intptr=10*(*intptr)   +    (*string-'0');
  35.        string++;
  36.        }
  37.  
  38.    if(*string=='\0'){
  39.        *intptr=signo *(*intptr);
  40.        return 1;
  41.        }
  42.    else
  43.        return 0;
  44.    }
  45.  

El problema esta resuelto correctamente, pero hace un momento no entendia que significaba:
Código
  1. *gets(string)
en la linea 13, pero mas o menos estudiando llegué a la Conclusión de que escribir:
Código
  1. while(*gets(string)) {
es equivalente a escribir:
Código
  1. gets(string);
  2. cin.sync();
  3. 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
  1.    gets(string);
  2.    cin.sync();
  3.    while(*string) {          //mientras el primer caracter que ingresaste es verdadero
  4.        if(convertir(string, &valor))
  5.            printf("Cadena %s convertida a entero: %ld\n", string, valor);
  6.        else
  7.            printf("Cadena %s no se puede convertir a entero\n", string);
  8.        printf("\nIngrese digitos numericos: \n");
  9.        printf("Termine digitando <<ENTER>>:\n");
  10.        gets(string);
  11.        cin.sync();
  12.        }
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...
4  Programación / Programación C/C++ / ¿ Como utilizar %n ? en: 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.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines