C/Visual C - problemillas con getchar:S

   
Vista:

problemillas con getchar:S

Publicado por ghsone (1 intervención) el 11/11/2008 00:40:11
Buenas, tengo un problemilla con un programa que tengo que hacer para el cole, trata de leer una opcio
A) Repetir(do while)
B)Mientras(while)
C)Desde(for)
entonces hay que sumar los numeros del 1 al 100 escojiendo la opcion ke sea, bueno aqui dejo el codigo y haber si algien me sabe decir porque todo el rato me dice opcion invalida, gracias!

#include<stdlib.h>
#include<stdio.h>
int main()
{
int i, suma, num, n;
char opcio;
n=10;
num=0;
printf("Programa per sumar numeros amb 3 opcions Escull opcio A- Repetir B- Mentres C- Desde ");
getchar();
opcio=getchar();
if(opcio=='a')
{
do{
num++;
n=n+num;
}while(num<100);
printf("La suma total es %d ",n);
}
if(opcio=='b')
{
while(num<100)
{
num++;
n=n+num;
printf("La suma total es %d ",n);
}
}
if(opcio=='c')
{
for(i=1; i=100; i++)
{
num++;
n=n+num;
}
printf("La suma total es %d ",n);
}
else
{
printf("Has escollit una opcio incorrecta ");
}


system("pause");
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problemillas con getchar:S

Publicado por sxp (4 intervenciones) el 13/11/2008 08:24:31
Hola: Bien antes que nada, quiero aclarar que soy nuevo en esto (tanto en programación como en C/C++)
Y lo más importante, es que yo estoy aprendiendo C++ y hay cosas distintas y cosas que pueden estar correctas en C pero en C++ no. Pero de paso aprendo yo también con el aporte de otras personas.
Por un lado, para que sea más sencillo, y dado que se quieren mostrar números de 1 a 100
inclusive, te recomiendo que a num le asignes 1 y no 0 y en las comparaciones utilices el operador
condicional menor igual que. ( <= )
Luego del printf que muestra al usuario las opciones tenés 2 getchar.
Creo que el primero está de más.
A la variable entera "n" creo que deberías asignarle el valor 0 y no el 10, porque es para calcular el total y sino los resultados van a darte una decena arriba del buscado.
deberías sacar de la estructura de repetición while el printf que muestra ese total, ya que debe
mostrarse solo una vez. Es decir, el printf debe ir entre las dos llaves de cierre (la del while y la del if)
dentro del encabezado del bucle for, la parte de la condición a evaluar debe ser <= 100, es decir
que te faltaría poner antes del igual el "menor que" (quedando así: >=)
Dentro del cuerpo del for, no debes colocar el posincremento que le das a la variable i.
Eso se realizará gracias al i++ en el encabezado del for.
Por último, en el código que hiciste, ocurre que cuando vos ingresas la 'a' o la 'b' el código del else se ejecuta siempre, porque ese else está asociado al último if (el de la opción 'c'), y entonces, al ver que ese else no es igual a 'c' se imprime que la selección fué incorrecta.
Entonces, se me ocurre que eso podría solucionarse usando un if que verifique que sea lo ingresado sea distinto a 'a' y distinto a 'b' y distinto a 'c' para que se imprima "selección incorrecta".

El código quedaría algo así:

#include<stdlib.h>
#include<stdio.h>

int main()
{
system("clear");
int i, suma, num, n;
char opcio;
n = 0;
num = 0;

printf("Programa per sumar numeros amb 3 opcions Escull opcio A- Repetir B- Mentres C- Desde ");
opcio = getchar();

if(opcio == 'a')
{

do{
num++;
n = n + num;
}while(num < 100);

printf("La suma total es %d ",n);

}

if( opcio == 'b' )
{

while( num < 100 )
{
num++;
n = n + num;
}

printf("La suma total es %d ",n);
}

if( opcio == 'c' )
{

for( i = 1; i <= 100; i++)
{
num++;
n=n+num;
}

printf("La suma total es %d ",n);
}

if( opcio != 'a' && opcio != 'b' && opcio != 'c' )
{
printf("Has escollit una opcio incorrecta ");
}

return 0;
}

Bueno espero que te sirva de algo y que me corrijan en lo que pueda estar errado.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemillas con getchar:S

Publicado por sxp (4 intervenciones) el 13/11/2008 08:29:06
Hago una corección:
La parte que dice ...(quedando así: >=)
en realidad es (quedando así: <=)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar