programa en C para leer cadena con espacios usando la función scanf ()

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


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *