Jump to content

problema en cadena


Recommended Posts

#include <stdlib.h>

#include <stdio.h>

#include <strings.h>

 

int main()

{

char palabra[1][20],c;

int x=0,y=0,z=0,n;

 

while(z<20){

fflush(stdin);

c=getch();

palabra[x][y]=c;

if(c==13)break;

printf("*");

y++;

z++;

}

printf("\n");

 

 

printf("%s\n",palabra[0]);

 

system("PAUSE");

return 0;

}

 

hola amigos, al ejecutar el código todo bien, pero cuando muestro la cadena, me aparecen caracteres "raros", he intentado limpiar la cadena, limpiar buffer, pero nada.

 

si me pudieran decir en que estoy fallando les estaria muy agradecido

 

Saludos.

Link to comment
Share on other sites

prueba así:

 

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

 

int main()

{

char palabra[1][20],c;

int x=0,y=0, i;

 

 

for(i=0;i<20;i++) palabra[0]='\0';

 

 

while(y<20){

fflush(stdin);

c=getchar();

palabra[x][y]=c;

if(c==13)break;

printf("*");

y++;

}

 

printf("\n%s\n",palabra[0]);

 

return 0;

}

 

Link to comment
Share on other sites

prueba así:

 

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

 

int main()

{

char palabra[1][20],c;

int x=0,y=0, i;

 

 

for(i=0;i<20;i++) palabra[0]='\0';

 

 

while(y<20){

fflush(stdin);

c=getchar();

palabra[x][y]=c;

if(c==13)break;

printf("*");

y++;

}

 

printf("\n%s\n",palabra[0]);

 

return 0;

}

 

lo habia intentado asi, pero al mostrar la cadena, no me sale nada, lo hice como lo dijo el amigo arriba con {'\0'}

y me resulto

 

gracias

 

 

Link to comment
Share on other sites

Lo que no entiendo es para qué utilizas una matriz de [1][20] que es lo mismo que usar un vector de [20]... también no entendí mucho para qué usabas tantas variables repetidas, de hecho le quité hartas cosas...

Edited by Th3_K4T
Link to comment
Share on other sites

prueba así:

 

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

 

int main()

{

char palabra[1][20],c;

int x=0,y=0, i;

 

 

for(i=0;i<20;i++) palabra[0]='\0';

 

 

while(y<20){

fflush(stdin);

c=getchar();

palabra[x][y]=c;

if(c==13)break;

printf("*");

y++;

}

 

printf("\n%s\n",palabra[0]);

 

return 0;

}

 

es perdida de tiempo ese for para inicializar, alomejor en este programa nose nota pero cuando es un programa mas grande se pajea mucho el programa( me paso por eso digo ), para inicializar basta con inicializar los primeros elementos.

Link to comment
Share on other sites

prueba así:

 

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

 

int main()

{

char palabra[1][20],c;

int x=0,y=0, i;

 

 

for(i=0;i<20;i++) palabra[0]='\0';

 

 

while(y<20){

fflush(stdin);

c=getchar();

palabra[x][y]=c;

if(c==13)break;

printf("*");

y++;

}

 

printf("\n%s\n",palabra[0]);

 

return 0;

}

 

es perdida de tiempo ese for para inicializar, alomejor en este programa nose nota pero cuando es un programa mas grande se pajea mucho el programa( me paso por eso digo ), para inicializar basta con inicializar los primeros elementos.

 

A qué te refieres con esto??

 

Si inicializa sólo los primeros "elementos" como tú los llamas, entonces si luego los reescribe el programa persiste, el secreto está en escribir el último casillero, cachai?

 

Lo otro, el error de este programa es el siguiente, ocupa un vector de 20 posiciones para guardar 20 letras, sin embargo, se necesitan 21 espacios, ya que falta el fin de línea, entonces en los 20 primeros casilleros se guarda las 20 letras o carácteres, y en el 21 se guarda el fin de linea. Esto es:

 

char cadena[21];

 

cadena[20]='\0';

 

Tal como lo había puesto inicializaba el vector completo, pero en realidad no es necesario, sólo basta dejar nulo el último espacio, ya que el programa siempre lee 20 carácteres, ni más ni menos.

 

De hecho inicializar todo el vector no debería haber solucionado tu problema, tanto la respuesta que te di anteriormente como la otra que te dieron está equivocada, el que te salga o no te salga basura es cuestión de suerte al menos que recuerdes poner el fin de linea (el carácter nulo).

 

Entonces queda:

 

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

 

int main()

{

char palabra[1][21],c;

int x=0,y=0, i;

 

 

palabra[0][20]='\0';

 

 

while(y<20){

fflush(stdin);

c=getchar();

palabra[x][y]=c;

if(c==13)break;

printf("*");

y++;

 

}

 

sorry por postear algo equivocado

 

 

;)

Edited by Th3_K4T
Link to comment
Share on other sites

a esto me referia

 

int main( int argc , char** argv )
{
   
     char palabra[20] = {'\0'}; // a esta linea xD, nada de escribir el ultimo, sobra y basta con eso.
     int i = 0;
     for(; i < 20; i++ )printf( "%c\n" , palabra[i] );
    return 0;
}

 

de echo el compadre nunca dio tamaño de la cadena que queria, podria haber sido 19 el tamaño que necesitaba :nose: , pero la primera respuesta esta bien ;)

Edited by el_caxulo
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...