/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema con do-while en visual studio [Solucionado]

 
      Índice del Foro elrincondelc.com -> General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
nicoguty



Registrado: 01 Jun 2011
Mensajes: 5
Ubicación: Argentina

MensajePublicado: 11/06/2011 1:46 pm
Título: Problema con do-while en visual studio [Solucionado]

Hola como les va?? les hago una consulta soy nuevo en esto del c pero estoy feliz de ser parte de este lenguaje fantastico.. mi problema esta en un lazo do while en visual studio 2010....mi programa esta basicamente asi

do
{
....

}
while(opcion==1);

no creo que sea un problema de declaracion pero el programa no me deja compilar porque me dice que opcion no esta declarada cuando si lo esta y tambien la usa perfectamente antes..

es un problema del compilador? si alguien me puede ayudar se lo voy a agradecer eternamente:) desde ya gracias!
_________________
Nico


Ultima edición por nicoguty el 22/06/2011 3:11 pm; editado 1 vez
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 2558
Ubicación: Valladolid (España)

MensajePublicado: 11/06/2011 3:02 pm
Título: Re: Problema con do-while en visual studio

Hola nicoguty, bienvenido al foro.

nicoguty escribió:
[...] el programa no me deja compilar porque me dice que opcion no esta declarada cuando si lo esta y tambien la usa perfectamente antes..


No es posible, si no compila no hay programa, ergo no puede usar la variable antes.

Publica el código fuente completo o el fragmento en cuestión. No obstante revisa que hechas las modificaciones se actualiza correctamente el fichero fuente.

·?0ƒ·
_________________
La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí.
Volver arriba
nicoguty



Registrado: 01 Jun 2011
Mensajes: 5
Ubicación: Argentina

MensajePublicado: 13/06/2011 10:23 am
Título: gracias por tu respuesta!

como estas!? se que no se puede compilar si hay un error de este tipo, yo me exprese mal.. si al programa no le coloco el lazo do while pero declaro y utilizo mi variable anda genial. cuando escribo las modificaciones y utilizo esta misma variable dentro de la condicion del while ahi me sale un error de que la variable no esta declarada.. pero solo dentro de la condicion.. afuera en otra sentencia que usa la variable no aparece ningun problema..Sad el codigo es el siguiente:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
void main (void)
{
do
{
char cadena1[100],cadena2[100];
char *pt1,*pt2;
int i,bandera=0,tam1,tam2,opcion;
pt1 = cadena1;
pt2 = cadena2;
system("cls");
printf("Ingrese la primera cadena de caracteres. Maximo 100 caracteres.\n");
scanf("%s",cadena1);
printf("Ingrese la segunda cadena de caracteres. Maximo 100 caracteres.\n");
scanf("%s",cadena2);

for(i=0;i<=100;i++)
{

if(*pt1=='\0')
break;
pt1++;
}
tam1=i;
printf("\t%d\n",tam1);
getch();
for(i=0;i<=100;i++)
{
if(*pt2=='\0')
break;
pt2++;
}
tam2=i;
printf("\t%d\n",tam2);
getch();
if(tam1==tam2)
{
pt1=cadena1;
pt2=cadena2;
for(i=0;i<=tam2;i++)
{
if(*pt1!=*pt2)
{
bandera=1;
break;
}
pt1++;
pt2++;
}
if(bandera==1)
printf("Las cadenas son diferentes");
else
printf("Las cadenas son iguales");
}
else
{
printf("Las cadenas no son iguales");
}
getch();
printf("Ingrese 0 para salir o 1 si desea reutilizar el programa");
scanf("%d",&opcion);
}
while(opcion==1);

}

desde ya agradezco tu tiempo! saludos!

pd: se que podria utilizar funciones de string.h y no tantos punteros para realizar el mismo programa pero como es practica de punteros el ejercicio para la facultad que estoy haciendo asi lo requiere!Smile jaja saludos!
_________________
Nico
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7520
Ubicación: Mexico

MensajePublicado: 13/06/2011 11:05 am
Título:

El problema se debe a que declaras la variable "opcion" dentro del bucle "do ... while". Esa variable no la puedes acceder dentro de la condición del bucle porque en ese momento la variable ya no existe.

La solución es sencilla, basta con declarar la variable fuera del bucle:
Código:
int opcion;

do {
   /* ... */
}while (opcion == 1);


Aparte de eso el programa tiene otros errores y/o deficiencias, por ejemplo cuando declaras un array de 100 elementos los indices validos son 0 a 99 (tu utilizas 0 a 100), deberías evitar el uso de conio, declarar la función main con el tipo de retorno "int", etc.

Si la intención es comparar cadenas mediante punteros ello puede realizarse de formas mas eficientes y cortas, si quieres revisarlas solo es cuestión de utilizar el motor de búsqueda de los foros.

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language


Ultima edición por rir3760 el 23/06/2011 4:34 pm; editado 1 vez
Volver arriba
nicoguty



Registrado: 01 Jun 2011
Mensajes: 5
Ubicación: Argentina

MensajePublicado: 22/06/2011 3:08 pm
Título:

rir3760: Muchas gracias por tu ayuda mi problema quedo solucionado! Te hago una consulta mas. ahi vi que me recomendabas varias cosas:
que la funcion main devolviese un int. Porque?
que no usase conio.h? porque no ? y como puedo reemplezarla para poder usar getch()

y lo de compara mas eficientemente las cadenas de caracteres lo se, pero es un ejercicio de punteros que tenia como requerimiento no utilizar la libreria string.h o no se que otra libreria se pueda usar..

desde ya muchas gracias por tu tiempo! mis consultas son para mejorar mi forma de programar! muchisimas gracias!!!
_________________
Nico
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7520
Ubicación: Mexico

MensajePublicado: 23/06/2011 4:45 pm
Título:

nicoguty escribió:
que la funcion main devolviese un int. Porque?

La función "main" debe retornar un valor de tipo int ya que esa es la forma garantizada a funcionar (si se declara "void" depende del compilador), este se utiliza para conocer si el programa termino sin errores. Se utiliza principalmente en scripts.

nicoguty escribió:
que no usase conio.h? porque no ? y como puedo reemplezarla para poder usar getch()

El problema con esa biblioteca es, al no ser parte de la biblioteca estándar, su soporte depende del compilador utilizado. Por ello cuando se empieza en el aprendizaje de C/C++ es mejor evitarla.

nicoguty escribió:
es un ejercicio de punteros que tenia como requerimiento no utilizar la libreria string.h o no se que otra libreria se pueda usar..

Casi todas las las funciones sobre cadenas como strcmp (comparar), strcpy (copiar), etc. están declaradas en ese encabezado. La excepción es sscanf (similar a scanf), su prototipo se encuentra en <stdio.h>

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
      Índice del Foro elrincondelc.com -> General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com