• Jueves 14 de Noviembre de 2024, 23:01

Autor Tema:  Error En Ciclo Do While  (Leído 2252 veces)

Logan

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Error En Ciclo Do While
« en: Martes 22 de Febrero de 2005, 19:00 »
0
Hola a todo el foro.

Me he encontrado con un error al ejecutar un ciclo do while , para que alguien pueda hacerme ver la falta en la que estoy incurriendo colocaré el codigo a continuación:
Código: Text
  1.  
  2. #include<stdio.h>
  3. #include<conio.h>
  4.  
  5. char res;
  6. char palabra[20];
  7.  
  8. int main()
  9. {
  10.   do
  11.   {
  12.    clrscr();
  13.    printf("Escribe tu nombre ");
  14.    scanf("%s",&palabra);
  15.    printf("hola %s",palabra);
  16.    gotoxy(20,22);
  17.    printf("desea continuar ... s/n ");
  18.    scanf("%c",&res);
  19.  
  20.    }while (res=='s' || res=='S');
  21.  
  22.   printf("bien...");
  23.   puts("Bye...");
  24.  getch();
  25. return 0;
  26. }
  27.  
  28.  

Bien, el error consiste en que al ejecutar dicho programa las instrucciones dentro del ciclo se ejecutan en su totalidad unicamente la primera vez, es decir, en el primer recorrido del ciclo, en las siguiente repeticiones solo despliega los letreros y me ignora los scanf, y yo ignoro porque suceda esto, el programa no tiene errores estructurales y creo que logicos tampoco, pero no doy con este problema.
Quiero mencionar que esto lo he notado con la estructura do while y tambien con la while, el problema momentaneamente lo he solventado escribiendo la condicion de esta forma
Código: Text
  1.  
  2. do {
  3. ....
  4. }while(getch()==115)
  5.  
  6.  
Asi, funciona perfectamente, pero la verdad sigo sin comprender porque con la primera forma las lineas scanf no se ejecutan como debe ser, es decir, no esperan a que se ingresen datos por teclado.

Por ultimo quiero comentar que este programa lo he ejecutado en un  Borland C++ 1.01 (bastante antugüo) y tambien C++3.0.

Gracias por su ayuda y sus comentarios, un saludo para todos.
Estamos aqui porque jamás terminaremos de aprender....

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Error En Ciclo Do While
« Respuesta #1 en: Miércoles 23 de Febrero de 2005, 07:48 »
0
Hola que tal.

Creo que a eso que te refieres es algun problema de C, o al menos que haya que parcharlo para que sirva, porque a mi me ha pasado lo mismo en dos ocaciones, una vez lo solucione poniendo un gets(); en lugar de el scanf() y la otra hice algo parecido como tu.

Asi que puedes probar con gets yo creo si funciona.

Hasta luego.

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Error En Ciclo Do While
« Respuesta #2 en: Miércoles 23 de Febrero de 2005, 10:06 »
0
No se, a mi me huele a la forma de funcionar de scanf(). Esta función lee hasta el primer espacio en blanco o hasta encontrar retorno de carro (si pulsamos enter).

Estoy quiere decir que si pones "hola mundo", scanf leera "hola" y en el buffer de entrada todavía quedará "mundo", lo que hará que el siguiente scanf no se pare y devuelva "mundo".

¿Puede ser así o me equivoco?

Nos vemos :hola:
Core Dumped
zirrus.es

arie w

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Error En Ciclo Do While
« Respuesta #3 en: Jueves 24 de Febrero de 2005, 09:06 »
0
el problema con el scanf es que para la lectura a un arreglo.
En tu caso estas leyendo un solo caracter, para esto necesitas un arreglo de por lo menos dos, ya que el ultimo lugar esta ocupado por el valor cero (fin de cadena).
En lugar de la variable char res, tienes que poner char res[2] y usar strcmp o
verificar res[0].
Por supuesto que lo mejor es usar car res = getche(), como tu mismo lo decubristes.
Exito ! ! !

Logan

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Error En Ciclo Do While
« Respuesta #4 en: Miércoles 2 de Marzo de 2005, 22:01 »
0
Gracias por su apoyo y sus comentarios, he recurrido a la funcion flushall() que me limpia el buffer de entrada y con esto he resuelto mi problema, de hecho llamo a esta función antes de usar el ultimo scanf()y al iniciar el ciclo y con eso quedo muy bien.

Espero que mi caso le sirva a algunos. Nos seguimos viendo. :D
Estamos aqui porque jamás terminaremos de aprender....