cadena Leer con espacios utilizando la función scanf () en el lenguaje de programación C – En este programa vamos a explicar cómo podemos tomar la entrada de una cadena con espacios?
vamos a ver lo que ha pasado, cuando leemos una cadena como otro tipo de entrada
#include <stdio.h>
int main()
{
char name[30];
printf("Enter name: ");
scanf("%s",name);
printf("Name is: %sn",name);
return 0;
}
salida -1 (Ingrese nombre sin espacio)
Enter name: Alex
Name is: Alex
salida -2 (Introduce el nombre con el espacio)
Enter name: Alex Thomas
Name is: Alex
En ambos casos la variable nombre almacenado sólo “Alex” ; así, esto está claro si leemos una cadena utilizando “% s” especificador de formato, la cadena se dará por terminado cuando el espacio blanco encontró.
Cómo leer cadena con espacios en C?
1) cadena Leer con espacios mediante el uso de “% [^ n]” especificador de formato
El especificador de formato “% [^ n]” le dice al compilador que lee los caracteres hasta ” n” no se encuentra.
Considere el programa
#include <stdio.h>
int main()
{
char name[30];
printf("Enter name: ");
scanf("%[^n]",name);
printf("Name is: %sn",name);
return 0;
}
salida
Enter name: Alex Thomas
Name is: Alex Thomas
Ver la salida, ahora el programa es capaz de leer cadena completa con espacios en blanco.
Problema -1 [Leer cadena después de la entrada número entero]
Aquí, vamos a leer la edad de la persona a continuación, nombre y ver qué va a pasar? (Es decir que estamos leyendo la cadena después de la entrada número entero)
Considere el programa
#include <stdio.h>
int main()
{
int age;
char name[30];
printf("Enter age: ");
scanf("%d",&age);
printf("Enter name: ");
scanf("%[^n]",name);
printf("Name is: %s, age is: %dn",name,age);
return 0;
}
salida
Enter age: 23
Enter name: Name is: , age is: 23
Oh nooooooooooooooo!
La entrada edad tuvo éxito, pero el compilador no espera a leer nombre y mueve a la siguiente declaración que fue printf ( “Nombre es:% s, la edad es:% d n”, nombre, años); y la salida es “Introducir nombre: El nombre es:, la edad es: 23” que no esperábamos.
por qué sucedió esto?
Al entrar en un valor entero y pulse Enter para leer el próximo valor, compilador almacena ya sea introducir o nula en primer carácter y la entrada de cadena termina de la cadena.
Aquí está la prueba?
Aquí estamos imprimiendo el valor del primer carácter de la cadena utilizando printf ( “Nombre es:% d, la edad es:% d n”, nombre [0], la edad); la salida será “Introducir nombre: Nombre es: 0, la edad es: 23”
Considere el programa
#include <stdio.h>
int main()
{
int age;
char name[30];
printf("Enter age: ");
scanf("%d",&age);
printf("Enter name: ");
scanf("%[^n]",name);
printf("Name is: %d, age is: %dn",name[0],age);
return 0;
}
salida
Enter age: 23
Enter name: Name is: 0, age is: 23
Aquí compilador almacena, nula (0) a el primer carácter de la cadena que es el nombre [0]
Cómo solucionarlo?
Tenemos que leer un carácter del buffer de entrada y almacenarlo en la variable temporal (recordemos – si vamos a leer texto o un carácter después de un número entero o float (en algunos casos) de entrada entonces deberíamos leer un carácter temporal que puede disponible en el buffer de entrada)
estoy usando una declaración scanf ( “% c”, y temperatura); antes de leer la cadena (que va a ser leído después de una entrada de enteros).
Considere el programa
#include <stdio.h>
int main()
{
int age;
char name[30];
char temp;
printf("Enter age: ");
scanf("%d",&age);
printf("Enter name: ");
scanf("%c",&temp); // temp statement to clear buffer
scanf("%[^n]",name);
printf("Name is: %s, age is: %dn",name,age);
return 0;
}
salida
Enter age: 23
Enter name: Alex Thomas
Name is: Alex Thomas, age is: 23
Véase, ahora somos capaces de leer cadena completa (con espacios) después de tomar entero de entrada.
Otra manera de leer cadena con espacios en C
Uso de fgets ()
fgets () función requiere tres parámetros
- char * s – puntero del personaje (en el que se almacenará cadena)
- int n – número máximo de caracteres de la cadena
- FILE * flujo – un puntero de la secuencia de archivo, podemos utilizar “entrada estándar”
fgets () voluntad lee la cadena completa con espacios y también añadir un carácter de nueva línea después de la entrada de cadena.
Considere el programa
#include <stdio.h>
int main()
{
int age;
char name[30];
char temp;
printf("Enter age: ");
scanf("%d",&age);
printf("Enter name: ");
scanf("%c",&temp); // temp statement to clear buffer
fgets(name,30,stdin);
printf("Name is: %s, age is: %dn",name,age);
return 0;
}
salida
Enter age: 23
Enter name: Alex Thomas
Name is: Alex Thomas
, age is: 23