¿Cómo tomar entrada de dos cuerdas?

#include  #include #include  int main(void) { char a[1001]; int t,i; scanf("%d",&t); while(t--) { fflush(stdin); gets(a); printf("%d\t",t); puts(a); } return 0; } 

Entrada:

 2 die another day. i'm batman. 

Ouput:

 1 0 die another day. 

Rendimiento esperado:

 1 die another day. 0 i'm batman. 

Cualquier persona, por favor, ayuda a aceptar más de una cadena sin ningún error. Después de ingresar 2, puedo ver que mis tomas toman la nueva línea como la primera cadena y luego la segunda cadena correctamente. Gracias por adelantado

Deje de usar scanf() de la stdin para leer la entrada. Nunca llames a fflush(stdin); tampoco, pero si dejas de usar scanf() ya no querrás hacerlo.

Lee líneas enteras usando fgets() en búferes de cadena de tamaño adecuado, luego analiza lo que obtuviste. Una buena función para analizar una cadena es sscanf() que es como scanf() excepto que se lee de una cadena en su lugar.

Esto será mucho más fácil, menos molesto y, en general, mejor. Ah, y por supuesto nunca usamos gets() .

Algo como esto (sin probar):

 #include  #include  int main(void) { char line[256]; if(fgets(line, sizeof line, stdin)) { int count; if(sscanf(line, "%d", &count) == 1) { while(count > 0) { if(fgets(line, sizeof line, stdin)) { printf("%s", line); --count; } else break; } } } return EXIT_SUCCESS; } 

No utilice fflush (stdin). use getchar() para borrar el carácter [ingresar] que queda después de scanf() como,

 #include  #include #include  int main(void) { char a[1001]; int t,i; scanf("%d",&t); getchar(); while(t--) { gets(a); printf("%d\t",t); puts(a); } return 0; } 

funciona.