scanf no solicitará entrada la segunda vez

#include "stdio.h" int main(void) { int order, nextp, N=3; char cont; nextp = 0; printf("\nShould we continue (y or n): "); scanf("%c", &cont); if (cont != 'y') return; for(; nextp < N; nextp++) { printf("Enter order number: "); scanf("%d", &order); printf("you have entered %d\n", order); printf("okay now continue with cont\n"); printf("enter cont y or n: "); scanf("%c", &cont); if (cont != 'y') { printf("\nnot equal to y\n"); break; } printf("after intepreting t[0]"); } return 0; } 

La salida se ve así

 Should we continue (y or n): y Enter order number: 45 you have entered 45 okay now continue with cont enter cont y or n: not equal to y 

La segunda entrada fue omitida. ¿Por qué?

debido al carácter de nueva línea que ya está en stdin, esto está sucediendo. utilizar

 scanf(" %c", &cont); 

en lugar de

 scanf("%c", &cont); 

tenga en cuenta un espacio antes de% c.

Esta es la razón por la cual el scanf no es el preferido para la entrada de caracteres. Le queda un retorno de carro después de la entrada anterior.

Por ejemplo, si añadiera un getchar() después de la entrada de la orden, su problema se resolvería, pero eso no es código limpio. También puede ver esto explícitamente al subsumir cont != 'y' a cont != '\n' .

En su lugar, usa getchar() para todas tus entradas y busca \ n

Después de scanf("%d", &order); consume el número (45 en este caso), todavía hay una nueva línea que queda después de eso. Puede usar scanf("%d\n", &order) para que consum la devolución.

Otra respuesta a esto se puede encontrar aquí:

scanf () deja la nueva línea char en el búfer?

Para la mayoría de las conversiones, scanf omitirá el espacio en blanco, pero para el formato de char (“% c”) debe omitir el espacio en blanco utilizando un espacio explícito en el formato (“% c”) como se explica aquí:

C – tratando de leer un solo char

Esto también se explica en la documentación de scanf , pero es confuso y puede ser mejor usar otra cosa como otros han mencionado.

Puedes usar fflush ()

 printf("enter cont y or n: "); fflush(stdin); scanf("%c", &cont);