Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: chicainge en 5 Marzo 2015, 22:01 pm



Título: programa punteros c
Publicado por: chicainge en 5 Marzo 2015, 22:01 pm
No se por que el programa se salta el segundo scanf. Ayuda plis

Código:
#include <stdio.h>
#include <stdlib.h>

struct D{
   int dato,dato2;
};

int main(){
 
  struct D d;
  struct D *p=&d;
 
  printf("introduce dato: \n");
  scanf("%d",&(*p).dato);
  printf("dato guardado con punto ((*D).dato) %d \n",(*p).dato);
  printf("introduce dato 2: \n");
  scanf("vuelve a escribir un valor para dato(%d)\n",&p->dato2);
  printf("dato guardado por flecha(->) %d \n",p->dato2);
 
  system("PAUSE");
  return 0;
}

GRACIAS.


Título: Re: programa punteros c
Publicado por: ivancea96 en 5 Marzo 2015, 22:21 pm
Código
  1. scanf("vuelve a escribir un valor para dato(%d)\n",&p->dato2);

Confundiste printf con scanf?


Título: Re: programa punteros c
Publicado por: rir3760 en 6 Marzo 2015, 03:01 am
No se por que el programa se salta el segundo scanf.
Como ya te comento ivancea96 el error se encuentra en la llamada a scanf:
Código
  1. scanf("vuelve a escribir un valor para dato(%d)\n",&p->dato2);

----

Solo para redondear el tema: cuando colocas texto literal en la cadena de formato este se consumirá solo si se encuentra literalmente en el stream (en este caso la entrada estándar).

En tu programa para que este genere la salida esperada debes introducir el primer numero, inmediatamente después el texto "vuelve a escribir un valor para dato(" y justo después de este el segundo numero. Por ejemplo:
Código:
introduce dato:
123vuelve a escribir un valor para dato(456  <== Entrada del programa
dato guardado con punto ((*D).dato) 123
introduce dato 2:
dato guardado por flecha(->) 456
Presione una tecla para continuar . . .

Un saludo