Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Programa en C que añade a una cadena las lineas metidas

Estas en el tema de Programa en C que añade a una cadena las lineas metidas en el foro de C/C++ en Foros del Web. Muy buenas, estaba haciendo un programa en C que me coja lineas por teclado y las añada a una cadena con todas las lineas. el ...
  #1 (permalink)  
Antiguo 26/05/2012, 18:17
 
Fecha de Ingreso: mayo-2012
Mensajes: 60
Antigüedad: 11 años, 11 meses
Puntos: 0
Pregunta Programa en C que añade a una cadena las lineas metidas

Muy buenas,
estaba haciendo un programa en C que me coja lineas por teclado y las añada a una cadena con todas las lineas. el problema es que no me funciona pues me coje los caracteres que le apetecen. he probado con scanf "%s" y sale lo mismo y ya no sé que hacer


Código C:
Ver original
  1. /*prototipos*/
  2. void limpiaBuffer(void);
  3.  
  4. int main(){
  5.   int j;
  6.   char c;
  7.   char linea[MAX],cadena[MAX];
  8.  
  9.   printf("Introduce cadenas hasta introducir una cadena vacia:\n");
  10.  
  11.   do{
  12.     limpiaBuffer();
  13.     scanf("%c",&c);     //coge caracter
  14.  
  15.     for(j=0; j<MAX && c!='\n'; ++j){
  16.       linea[j] = c;
  17.       scanf("%c",&c);       //coge caracter
  18.     }
  19.  
  20.    // printf("cadena: %s\n",linea);
  21.  
  22.     for(j=0; j<MAX && linea[j]!='\0';++j)
  23.       cadena[j] = linea[j];     //copia cadena, no cuenta \0
  24.     strcat(cadena,linea);
  25.    
  26.   }while(c!= '\n' );
  27.  
  28.  // cadena[j] = '\0';
  29.  
  30.  
  31.   printf("cadena total:\n %s\n",cadena);
  32.  
  33.   return 0;
  34. }
  35.  
  36. void limpiaBuffer(void){
  37.   char c;
  38.   do{
  39.     c = getchar();
  40.   }while(c != '\n');
  41. }
  #2 (permalink)  
Antiguo 26/05/2012, 23:42
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Programa en C que añade a una cadena las lineas metidas

Hola! tenes varios errores:
1º En este caso la funcion limpiaBuffer() esta demas, de echo te trae problemas. Esto es porque en cierta forma el primer for ya esta limpiando el bufer
2º Toda cadena termina en '\0', lo cual no lo haces. Despues del primer for deberias agregarselo al arreglo linea
3º El segundo for esta demas, practicamente estas haciendo lo mismo q hace el strcat. Usa strcat o for, pero no las dos (yo sacaria el for ya que esta mal empleado para lo q queres hacer)
4º Si dejas a strcat vas a tener problemas. strcat espera dos cadenas(string) y como el arreglo cadena no tiene nada(al principio) te va a dar errores. Lo q podrias hacer es poner
Código C:
Ver original
  1. cadena[0]='\0';
antes del do-while
5º La condicion del while esta mal, tendrias q poner otra, ya q solo vas a poder ingresar una cadena con esa condicion

Creo q eso es todo, intenta hacer los cambios sino segui preguntando. Saludos
  #3 (permalink)  
Antiguo 27/05/2012, 08:23
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 11 meses
Puntos: 28
Respuesta: Programa en C que añade a una cadena las lineas metidas

amigo,,explicate bien que es lo que quieres, explicame el problema y te ayudo...

saludos
crono
  #4 (permalink)  
Antiguo 27/05/2012, 10:15
 
Fecha de Ingreso: mayo-2012
Mensajes: 60
Antigüedad: 11 años, 11 meses
Puntos: 0
Pregunta Respuesta: Programa en C que añade a una cadena las lineas metidas

Cita:
Iniciado por cesar_casla Ver Mensaje
Hola! tenes varios errores:
1º En este caso la funcion limpiaBuffer() esta demas, de echo te trae problemas. Esto es porque en cierta forma el primer for ya esta limpiando el bufer
2º Toda cadena termina en '\0', lo cual no lo haces. Despues del primer for deberias agregarselo al arreglo linea
3º El segundo for esta demas, practicamente estas haciendo lo mismo q hace el strcat. Usa strcat o for, pero no las dos (yo sacaria el for ya que esta mal empleado para lo q queres hacer)
4º Si dejas a strcat vas a tener problemas. strcat espera dos cadenas(string) y como el arreglo cadena no tiene nada(al principio) te va a dar errores. Lo q podrias hacer es poner
Código C:
Ver original
  1. cadena[0]='\0';
antes del do-while
5º La condicion del while esta mal, tendrias q poner otra, ya q solo vas a poder ingresar una cadena con esa condicion

Creo q eso es todo, intenta hacer los cambios sino segui preguntando. Saludos

gracias por la respuesta, la cosa era que quería comprobar copiando de las 2 formas, pero se me olvido separar en 2 cadenas, una para el for y otra para el strcat xD
pero no sé cual es la expresion a meter dentro del bucle, se me sale la 1º vez y me coje de más caracteres así que no sé como seguir en el bucle

el resto de cambios están ya hechos:
Código C:
Ver original
  1. #define MAX 20
  2. #define MAX2 40
  3.  
  4.  
  5. /*prototipos*/
  6. void limpiaBuffer(void);
  7.  
  8. int main(){
  9.   int j;
  10.   char c;
  11.   char linea[MAX],cadena[MAX2],cadena2[MAX2];
  12.  
  13.   printf("Introduce cadenas hasta introducir una cadena vacia:\n");
  14.   cadena2[0]='\0';
  15.  
  16.   do{
  17.  
  18.     scanf("%c",&c);     //coge caracter
  19.  
  20.     for(j=0; j<MAX && c!='\n'; ++j){
  21.       linea[j] = c;
  22.       scanf("%c",&c);       //coge caracter
  23.     }
  24.     linea[j]='\0';
  25.  
  26.  
  27.     for(j=0; j<MAX && linea[j]!='\0';++j)
  28.       cadena[j] = linea[j];    
  29.  
  30.     strcat(cadena2,linea);
  31.    
  32.   }while(c!= '\n' );
  33.  
  34.  
  35.   printf("cadena total 1:\n %s\n",cadena);
  36.   printf("cadena total 2:\n %s\n",cadena2);
  37.  
  38.   return 0;
  39. }
  40.  
  41. void limpiaBuffer(void){
  42.   char c;
  43.   do{
  44.     c = getchar();
  45.   }while(c != '\n');
  46. }
  #5 (permalink)  
Antiguo 27/05/2012, 10:24
 
Fecha de Ingreso: mayo-2012
Mensajes: 60
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Programa en C que añade a una cadena las lineas metidas

he corregido una serie de errores que me copiaban la cadena1 cada vez que pasa por el bucle, el programa correcto sería: PERO ME FALTA QUE SE QUEDE EN EL BUCLE
Código C:
Ver original
  1. int main(){
  2.   int j,i=0;        //iniciar i, contador para añadir en la cadena y no sustituir
  3.   char c;
  4.   char linea[MAX],cadena[MAX2],cadena2[MAX2];
  5.  
  6.   printf("Introduce cadenas hasta introducir una cadena vacia:\n");
  7.   cadena2[0]='\0';
  8.  
  9.   do{
  10.  
  11.     scanf("%c",&c);     //coge caracter
  12.  
  13.     for(j=0; j<MAX && c!='\n'; ++j){
  14.       linea[j] = c;
  15.       scanf("%c",&c);       //coge caracter
  16.     }
  17.     linea[j]='\0';
  18.  
  19.  
  20.     for(j=0; j<MAX && linea[j]!='\0';++j,++i)
  21.       cadena[i] = linea[j];         //falta el \0
  22.  
  23.     cadena[i]='\0';         //añadimos
  24.  
  25.     strcat(cadena2,linea);
  26.    
  27.   }while(c!= '\n' );
  28.  
  29.  
  30.   printf("cadena total 1:\n %s\n",cadena);
  31.   printf("cadena total 2:\n %s\n",cadena2);
  32.  
  33.   return 0;
  34. }
  #6 (permalink)  
Antiguo 27/05/2012, 13:53
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Programa en C que añade a una cadena las lineas metidas

Tenes cambiar la condicion del while. Lo q podes hacer es usar un flag
Código C:
Ver original
  1. int flag=0;
  2. do {
  3.   scanf("%c",&c);
  4.   if(c=='\n') // si c es enter es porque no se ingreso una cadena
  5.       flag=1;
  6.   for()
  7.   ..........
  8.   }while(flag==0);// continua mientras no se haya ingresado una cadena "vacia"
Saludos

Etiquetas: cadenas, escanear, lineas, separa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:08.