Scanf funciona antes de su punto de ejecución.

Intenté un progtwig simple. La función devolvía el número entero y el puntero del carácter. Después de ejecutar ese código, encontré alguna acción extraña por scanf. Intenté imprimir el mensaje (ingrese a, b 🙂 lea dos entradas enteras y el mensaje (ingrese c , d 🙂 lea dos entradas de caracteres. pero en el tiempo de ejecución … encontré que las entradas para el carácter c se leen inmediatamente después de ingresar las entradas para a, b .. para, por ejemplo: ingresar a, b: 10 20 ingresar c, d : g solo obtiene una entrada (para d) y la entrada para c es una nueva línea después de 20 .. para, por ejemplo, 2: ingrese a, b: 10 20a ingrese c, d: g, recibe solo una entrada (para d) y una entrada para c es un 20 después. ¿Por qué sucede esto? Por favor, aclaralo

int* add(int *a,int *b) { return (*a>*b?a:b); } char* charret(char *c,char *d) { return (*c>*d?c:d); } int main() { int a,b; char c,d; printf("\n\t\tFUNCTION RETURNING INTEGER POINTER\n\t"); printf("Enter the Number A and B:"); scanf("%d %d",&a,&b); printf("\tEnter the character c :"); scanf("%c %c",&c,&d); printf("The Biggestt Value is : %d\n\t",*add(&a,&b)); printf("\n\tThe character c= %c hi d= %c",c,d); // scanf("%c",&d); printf("\n\tThe Biggestt Value is : %c", *charret(&c,&d)); getch(); return 0; } 

%c leerá cualquier carácter, incluido el carácter de nueva línea de su entrada anterior. Si desea leer el primer carácter que no sea un espacio en blanco, agregue un espacio antes de% c en su cadena de formato:

  scanf(" %c %c",&c,&d); /* ^ added space */ 

Esto hará que scanf() coma cualquier espacio en blanco antes de leer el personaje.

Para la mayoría de los especificadores de scanf() , se omite cualquier espacio en blanco inicial. %c es una excepción a esto, porque lee un valor de un solo carácter, incluidos los espacios en blanco. Tenga en cuenta que cuando presione Entrar , ha enviado un '\n' al búfer de entrada.

scanf (“% d% d”, & a, & b);

Lee en dos números. El \n al final, desde presionar Enter , se deja en el búfer.

scanf (“% c% c”, & c, & d);

Lee en dos caracteres, el primero de los cuales será el \n dejado en el búfer. Una forma de evitar esto es:

while (getch ()! = ‘\ n’);

Esto se lo comerá todo hasta incluir una nueva línea. Puedes poner eso después de las líneas scanf() que sabes que dejarán una nueva línea atrás.