CADENAS CON SCANF

CADENA
30 de Octubre del 2004
cuando leo una cadena con scanf cuando llega al primer espacio no mete mas caracteres en la variable.
como se hace?
es q si utilizo el gets el primer scanf q se encuentra se lo salta

AXIAS

maria
30 de Octubre del 2004
Espero q te contesten muchos porq a mi me pasa lo mismo y necesito ayuda.
con el scanf me lee solo asta el primer espacio en blanco. pero con %^[n] en vez de %s lo soluciono pero luego no se mostrarlo.
Y no me digais de hacerlo con el getchs porq si lo hago con él luego no me reconoce el siguiente scanf.
AYUDA!!!

Rev
30 de Octubre del 2004
Para poder leer una cadena de carácter desde un scanf se puede hacer esto:

char cadena1[20],cadena2[20],cadena3[20];
.....
printf("Escribe la cadena 1: "); scanf("%s",cadena1);
printf("Escribe la cadena 2: "); scanf("%s",cadena2);
printf("Escribe la cadena 3: "); scanf("%s",cadena3);

y con eso debe jalar, cuando se lee una cadena de carácteres se debe específicar el tamaño de la cadena, y dentro del scanf usar la variable sin el ampersand(&), ya que como se trata de un arreglo de carácter no puede ser almacenado en un solo espacio de memoria, espero darme a entender.
Espero te sirva.

noel solw
30 de Octubre del 2004
Convendrias que mandes el codigo, para ver exactamente lo que falla.

EnKub
30 de Octubre del 2004
es muy sencillo, solo tienes que hacer esto para almacenar los datos con espacios en blanco

char *nomb;

Printf("Dame tu nombre completo: ")
scanf(" %^[n]", nomb);

fijate bien en el espacio en blanco antes del simbolo % es muy importante, despues para mostrar los datos solo haces esto

printf("Tu nombre es %s", nomb);
getch();

espero te ayude en algo.

noel solw
30 de Octubre del 2004
conviene usar
cin.getline(str,len)
con
#include <iostream.h>

donde : str es una cadena de char y len es la cantidad maxima de caracteres a recibir (segun la dimension de str, por supuesto).

platero80
30 de Octubre del 2004
Hola yo he hecho este programa si lo seguis lo pillareis enseguida en los for pongo un numero menos en la condicion porque empieza por 0 :

#include <stdio.h>
#include <conio.h>

void suma();
void resta();
void multiplica();
char opc1;
float cifra[5];
float cifra1[5];
float cifra2[5];
int paso, paso1, paso2;
void main (void)
{
clrscr();
printf("introducir valores de la serie 1 \n");
for(paso1=0;paso1<=4;paso1++)
scanf("%f",&cifra1[paso1]);
for(paso1=0;paso1<=4;paso1++)
printf("%.1f\n",cifra1[paso1]);
getch();

printf("introducir valores de la serie 2 \n");
for(paso2=0;paso2<=4;paso2++)
scanf("%f",&cifra2[paso2]);
for(paso2=0;paso2<=4;paso2++)
printf("%.1f\n",cifra2[paso2]);
getch();

printf("elegir una opcion\n");
printf("1--suma serie 1 y serie 2\n");
printf("2--resta serie 1 y serie 2\n");
printf("3--multiplicacion de serie 1 y serie 2\n");

opc1=getch();
switch(opc1)
{
case \'1\':suma();
break;
case \'2\':resta();
break;
case \'3\':multiplica();
break;
default:
break;
}
}
void suma()
{
paso1=0;
paso2=0;
for(paso=0;paso<=4;paso++)
{
cifra[paso]=cifra1[paso1]+cifra2[paso2];
printf("\n%.1f %.1f %.1f\n",cifra[paso],cifra1[paso1],cifra2[paso2]);
paso1++;
paso2++;
getch();
}
}
void resta()
{
paso1=0;
paso2=0;
for(paso=0;paso<=4;paso++)
{
cifra[paso]=cifra1[paso1]-cifra2[paso2];
printf("\n%.1f %.1f %f.1\n",cifra[paso],cifra1[paso1],cifra2[paso2]);
paso1++;
paso2++;
getch();
}
}

void multiplica()
{
paso1=0;
paso2=0;
for(paso=0;paso<=4;paso++)
{
cifra[paso]=cifra1[paso1]*cifra2[paso2];
printf("%.0f %.0f %.0f",cifra[paso],cifra1[paso1],cifra2[paso2]);
paso1++;
paso2++;
getch();
}
}