
alegría
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *method1(void)
{
static char a[4];
scanf("%s\n", a);
return a;
}
int main(void)
{
char *h = method1();
printf("%s\n", h);
return 0;
}
Cuando ejecuto el código anterior, el mensaje me pregunta dos veces para la entrada (solo uso scanf
una vez en el código). ¿Porqué es eso?
(Ingresé ‘jo’; me pidió más información, así que ingresé ‘jo’ nuevamente. Luego solo imprimió ‘jo’ una vez).

MOHAMED
tienes que quitar el \n
del formato de cadena del scanf
. Debería ser
scanf("%s",a);
EDITAR: Explicación
la %s
significa que scanf lee el carácter de entrada hasta que obtiene un delimitador que debería ser un espacio en blanco como un espacio, una pestaña o una nueva línea (\n
) por lo que la primera entrada se obtiene como delimitador para el "%s"
y agregando el "\n"
al formato de cadena "%s\n"
significa que el scanf esperará 2 líneas nuevas, la primera línea nueva está relacionada con el delimitador de la "%s"
y la segunda nueva línea está relacionada con el\n
del formato de cadena.

Jens
Desde mi página de manual de scanf
Los espacios en blanco (como espacios en blanco, tabuladores o saltos de línea) en la cadena de formato coinciden con cualquier cantidad de espacio en blanco, incluido ninguno, en la entrada. Todo lo demás coincide solo consigo mismo.
Así con scanf ("%s\n", a)
buscará una cadena seguida de un espacio en blanco opcional. Dado que después de la primera línea nueva pueden seguir más espacios en blanco, scanf no se realiza después de la primera línea nueva y busca lo que sigue. Notará que puede ingresar cualquier número de nuevas líneas (o tabulaciones o espacios) y scanf todavía esperará por más.
Sin embargo, cuando ingresa la segunda cadena, la secuencia de espacios en blanco se delimita y el escaneo se detiene.
Usar scanf ("%s", a)
para no escanear los espacios en blanco finales.
use gets() o fgets() en su lugar… alternativamente use scanf(“%[^\n]s”,a);

kiranmai
Remove \n
from the scanf format and give an input and it displays the output based on the given output once.
Don’t use the escape sequence in scanf stdio function
scanf ("%s", a);

Srinivas Nallapu
you can use either of these to avoid the mentioned problem :
scanf("%s",a);
or
scanf("\n%s",a);

Ramesh
Try this: Don’t use \n on scanf, it won’t ask you twice and sometimes it might show an error
Your code: scanf("%s\n", a);
Try this on scanf: scanf("%s", a);
¿Qué salida obtuviste?
– Aswin Mu ru gesh
1 de abril de 2013 a las 8:23
Esa es una matriz muy corta. ¿Introdujo demasiados datos?
–Jonathan Leffler
1 de abril de 2013 a las 8:24
Entro jo. pide otra entrada. luego entro en jo de nuevo. entonces solo imprime jo una vez.
– alegría
1 de abril de 2013 a las 8:25
Sé que es solo un fragmento, pero deberías siempre verifique el resultado de las funciones de conversión como scanf y amigos.
– Jens
01/04/2013 a las 19:50