Ahora tengo otra duda, por ejemplo corro mi programa, hago una operacion con fracciones por ejemplo, al calcular la resistencia, que es sumado, sumo (2/2)+(2/2) me da de resultado 2, lo cual es correcto, el programa cuando termina de hacer la operacion pulso ENTER y regreso al menu principal, y si eligo la misma opcion de volver a calcular otra resistencia, y pongo unas fracciones como (1/2)+(1/2) y me deberia dar como resultado 1, pero me da como resultado 3, por que aun guarda en su bufer el resultado de 2.
El problema que te aparece no tiene nada que ver con el buffer,
¡ ¡ ¡ quita todos los "fflush(stdin)" del código que no hacen nada ¡ ¡ ¡ .
Es más sencillo y el culpable en el fondo es el goto.
Lo que ocurre es que cada vez que hace una llamada el goto debe encontrar las variables que acumulan o suman con valor de cero o uno en el caso de un contador que tienes por ahí, pero lo que se encuentran es a esas variables con el valor que han tomado anteriormente, de ahí que sumen al valor viejo el nuevo.
Ese efecto lo corriges asignando nuevamente ,después de la etiqueta a la que llama el goto, esas variables a sus valores originales. por ejemplo, en el caso de la resistencia tendrías que poner:
Código
void resistencia(void) { float res, total=0,suma=0,numerador[sise], denominador[sise]; int n,cont,opc,cont1=1,n1; a: total=0,suma=0,cont1=1; /* <==AQUI INICIALIZAS NUEVAMENTE */ system("clear"); printf("\t\tRESISTENCA\n\n"); ..................
Si tienes duda pregunta nuevamente.
Saluditos!.
P.D: En todo caso habría que poner un "fflush(stdout)" después de cada printf no terminado en \n y ... pero en fin, eso es otro tema.
REEDITO: Perdona que te cambie system (clear) a system (cls) pero así es como me funciona.
Te faltaba además algunos break, tenías entrada de dos resistencias fraccionarias en el cálculo del voltaje -porqué dos o no 3 o 5- y te he cambiado los goto por while, también nombrabas a Numerador como denominador y ya que usas system, en lugar de dos getchar seguidos yo pondría un system(pause). Revisa no obstante por si se ha colado algún gazapo:
Código
#include <stdio.h> #include <stdlib.h> #define sise 100 void resistencia(void); void intensidad(void); void voltaje(void); /***************************************************/ int main() { int opc; printf("\n"); printf ("\t\tC\tE\tP\tR\tO\tG\n"); printf("\n"); printf("\n"); printf ("\t\t\tCIRCUITOS EN SERIE \n"); printf ("\n"); printf ("Este Software se basa en la ley de OHM\n"); printf("\n"); printf("Precione ENTER para continuar\n"); getchar(); while (1){ system("cls"); printf("ELIJA UNA OPCCION: \n\n \t1)Calcular Resistencia\n\t2)Calcular Intensidad\n\t3)Calcular Voltaje\n\t4)Salir\n"); scanf("%d",&opc); switch (opc) { case 1: { resistencia(); break; } case 2: { intensidad(); break; } case 3: { voltaje(); break; } case 4: { exit(0); } } } return 0; } /***************************************************/ void resistencia(void) { float res, total=0,suma=0,numerador[sise], denominador[sise]; int n,cont,opc,cont1=1,n1; while (1){ total=0,suma=0,cont1=1; /* <==AQUI INICIALIZAS NUEVAMENTE */ system("cls"); printf("\t\tRESISTENCA\n\n"); printf("Con que tipo de datos desea calcular la resistencia:\n\n \t1)Numeros fraccionarios\n \t2)Numeros enteros/decimales\n \t3)regresar al menu anteior\n \t4)Salir\n"); scanf("%d",&opc); switch(opc) { case 1: { system("cls"); printf("\t\tEn esta sección calcularemos la resistencia total\n\n"); printf("Cuantas resistencias tiene el circuito: "); scanf("%d",&n); printf("\n"); for (cont=0;cont<=n-1;cont++) { printf("Escribe el valor del Numerador %d (_/ ): ",cont); scanf("%f",&numerador[cont]); printf("Escribe el valor del Denominador %d ( /_): ",cont); scanf("%f",&denominador[cont]); printf("\n"); } for(cont=0;cont<=n-1;cont++) { suma=suma+(numerador[cont]/denominador[cont]); } printf("\n"); printf("El valor de la resistencia total es: %.2f Ohmios",suma); getchar();getchar(); break; } case 2: { system("cls"); total=0;cont1=1; printf("\t\tEn esta sección calcularemos la resistencia total\n\n"); printf("Cuantas resistencias tiene el circuito: "); scanf("%d",&n1); printf("\n"); while (cont1<=n1) { printf("Escribe el valor de la resistencia %d :> ",cont1); scanf("%f",&res); total+=res; cont1++; } printf("\n"); printf("El resultado de el total de las resistencias es: %.2f ohmios",total); getchar();getchar(); break; } case 3: main(); break; case 4: exit(0); } } } /***************************************************/ void intensidad(void) { float vol,res,total=0, numerador[sise],denominador[sise],vol1=0,vol2=0,resul; int opc,cont; while (1){ system("cls"); printf("\t\tIntensidad\n"); printf("\n"); printf("Con que tipo de datos desea calcular la Intensidad:\n\n \t1)Numeros fraccionarios\n \t2)Numeros enteros/decimales\n \t3)regresar al menu anteior\n \t4)Salir\n"); scanf("%d",&opc); switch(opc) { case 1: { system("cls"); printf("\t\tEn esta sección calcularemos la intensidad total\n"); printf("\n"); printf("Escribe el valor del voltaje:\n\n"); for (cont=1;cont<=1;cont++) { printf("Escribe el valor del Numerador (_/ ): "); scanf("%f",&numerador[cont]); printf("Escribe el valor del Denominador ( /_): "); scanf("%f",&denominador[cont]); printf("\n"); vol1=vol1+(numerador[cont]+denominador[cont]); } printf("Escribe el valor de la resistencia total:\n\n"); for (cont=2;cont<=2;cont++) { printf("Escribe el valor del Numerador (_/ ): "); scanf("%f",&numerador[cont]); printf("Escribe el valor del Denominador ( /_): "); scanf("%f",&denominador[cont]); printf("\n"); vol2=vol2+(numerador[cont]+denominador[cont]); } resul=vol1/vol2; printf("\n"); printf("El valor de la intensidad total es: %.2f Ampers",resul); getchar();getchar(); system("cls"); break; } case 2: { system("cls"); printf("\t\tEn esta sección calcularemos la intensidad total\n"); printf("\n"); printf("Cual es el valor del voltaje total: "); scanf("%f",&vol); printf("Cual es el valor de la resistencai total: "); scanf("%f",&res); printf("\n"); total=vol/res; printf("La intensidad es: %.2f ampers",total); getchar();getchar(); break; } case 3: main(); case 4: exit(0); } } } /***************************************************/ void voltaje(void) { float res,inte,total=0,numerador,denominador,tot1=0,resul; int opc; while (1) { system("cls"); tot1=0; printf("\t\tVoltaje\n\n"); printf("Con que tipo de datos desea calcular la Intensidad:\n\n \t1)Numeros fraccionarios\n \t2)Numeros enteros/decimales\n \t3)regresar al menu anteior\n \t4)Salir\n"); scanf("%d",&opc); switch(opc) { case 1: { printf("\t\tEn esta sección calcularemos el voltaje total\n\n"); printf("Cual es el valor de la resistencia total: \n\n"); printf("Escribe el valor del Numerador (_/ ): "); scanf("%f",&numerador); printf("Escribe el valor del Denominador ( /_): "); scanf("%f",&denominador); printf("\n"); tot1=(numerador/denominador); printf("Cual es el valor de la intensidad total: "); scanf("%f",&inte); printf("\n"); resul=inte*tot1; printf("El valor de el voltaje total es: %.2f Volts",resul); getchar();getchar(); break; } case 2: { system("cls"); printf("\t\tEn esta sección calcularemos el voltaje total\n\n"); printf("Cual es el valor de la resistencia total: "); scanf("%f",&res); printf("Cual es el valor de la intensidad total: "); scanf("%f",&inte); printf("\n"); total=res*inte; printf("El voltaje total es: %.2f vols",total); getchar();getchar(); break; } case 3: main(); break; case 4: exit(0); } } } /***************************************************/