Leoxz Posted July 6, 2011 Report Share Posted July 6, 2011 #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 More sharing options...
el_caxulo Posted July 7, 2011 Report Share Posted July 7, 2011 (edited) limpia la cadena con memset http://docs.mis-algoritmos.com/c.funcion.memset.html osino inicializalo vacio, creo que seria asi char palabra[1][20] = {{'\0'} , {'\0'}}; no estoy seguro de la segunda :P Edited July 7, 2011 by el_caxulo Link to comment Share on other sites More sharing options...
Th3_K4T Posted July 7, 2011 Report Share Posted July 7, 2011 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 More sharing options...
Leoxz Posted July 7, 2011 Author Report Share Posted July 7, 2011 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 More sharing options...
Th3_K4T Posted July 7, 2011 Report Share Posted July 7, 2011 (edited) 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 July 8, 2011 by Th3_K4T Link to comment Share on other sites More sharing options...
el_caxulo Posted July 8, 2011 Report Share Posted July 8, 2011 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 More sharing options...
Th3_K4T Posted July 8, 2011 Report Share Posted July 8, 2011 (edited) 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 July 8, 2011 by Th3_K4T Link to comment Share on other sites More sharing options...
el_caxulo Posted July 8, 2011 Report Share Posted July 8, 2011 (edited) 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 , pero la primera respuesta esta bien ;) Edited July 8, 2011 by el_caxulo Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now