Duda básica de C!!!!!!
-
Hola a todos, tengo una consulta muy básica. Tengo que hacer un programa en el cual se ingresa una palabara, un caracter viejo y uno nuevo. El programa debe buscar el caracter viejo en la palabra y remplazarlo por el nuevo. Luego mostrar la palabra con el caracter cambiado. El programa compila, pero cuando lo ejecuto una vez que ingreso el caracter viejo y me pide el nuevo no lo puedo ingresar y me muestra directamente la palabra sin el caracter viejo.
Otra duda que tengo es si conviene usa puts o printf si voy a mostrar strings, lo mismo con gets o scanf. Desde ya, Muchas Gracias.
#include
#include
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
char palabra[20], viejo, nuevo;
int i = 0;
puts("Ingrese una palabra");
gets(palabra);
puts("Ingrese un caracter viejo");
viejo = getchar();
puts("Ingrese un caracter nuevo");
nuevo = getchar();
while ( palabra[i] != '\0')
{
if ( palabra[i]== viejo)
palabra[i]=nuevo;
i++;
}
printf ("La palabra queda: %s \n",palabra);
system("PAUSE");
return EXIT_SUCCESS;
} -
eso creo que pasa porque te queda el salto de linea en el buffer donde lee, proba con scanf y printf
Tambien es conveniente hacer un flush antes de leer, para eliminar cualquier caracter que haya quedado como basura en el buffer. -
tiene razon agustin_ramone, otra q podes hacer es usar un auxiliar...
cuando declaras char palabra[20] tb declara un char aux[20]
y seria mas o menos asi:Código:#include
#include #include #include using namespace std; int main(int argc, char *argv[]) { char palabra[20], aux[20], viejo, nuevo; int i = 0; puts("Ingrese una palabra"); gets(palabra); puts("Ingrese un caracter viejo"); viejo = getchar(); puts("Ingrese un caracter nuevo"); nuevo = getchar(); while ( palabra[i] != '\0') { aux[i]=palabra[i]; if ( palabra[i]== viejo) aux[i]=nuevo; i++; } printf ("La palabra queda: %s \n",aux); system("PAUSE"); return 0; //aca please pone 0 no el EXIT_SUCCESS } -
esta bien,hay una solucion mas compacta (si usas borland) con la funcion kbhit de la libreria conio.h.
Inmediatamente despues de leer un string o un caracter pones esta linea:
while(kbhit()) getch();
Para no tener que repetirla muchas veces podes hacer una funcion:
void limpiar(void){
while(kbhit()) getch();
}
Entonces en el codigo pones:
gets(palabra);
limpiar();
gets(palabra2);
limpiar();
...
...
Otra forma es hacer un macro:
#define limpiar while(kbhit()) getch();
entonces en el programa en vez de poner limpiar(); como en el caso anterior, ahora solo pones el nombre del macro "limpiar", jejeje cada vez mas compacto
