| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
nicoguty
Registrado: 01 Jun 2011 Mensajes: 5 Ubicación: Argentina
| Publicado: 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)
| Publicado: 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
| Publicado: 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.. 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! jaja saludos! _________________ Nico |
|
| Volver arriba | |
 |
|
rir3760

Registrado: 01 Oct 2004 Mensajes: 7520 Ubicación: Mexico
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |
 |
|
|