programa punteros c

Iniciado por chicainge, 5 Marzo 2015, 22:01 PM

0 Miembros y 1 Visitante están viendo este tema.

chicainge

No se por que el programa se salta el segundo scanf. Ayuda plis

#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.

ivancea96

scanf("vuelve a escribir un valor para dato(%d)\n",&p->dato2);

Confundiste printf con scanf?

rir3760

Cita de: chicainge en  5 Marzo 2015, 22:01 PMNo se por que el programa se salta el segundo scanf.
Como ya te comento ivancea96 el error se encuentra en la llamada a scanf:
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:
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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language