Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: rackdon en 28 de Abril 2014, 22:56
-
Buenas noches, en el siguiente código, da igual el número que meta que me sale como erroneo. Lo único que funciona es usar EOF al inicio del programa, entonces sale correctamente, en cuanto meto algún numero ya tampoco fundiona EOF.
// Ejercicio 4.19: uso de la instrucción switch //
#include <stdio.h>
main()
{
int numprod, cantidad;
float total = 0;
printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (-1 en producto para terminar):\n", 163, 161);
while ( ( numprod = getchar() )!= EOF) {
scanf("%d", &cantidad);
switch (numprod) {
case 1: total += 2.98 * cantidad;
break;
case 2: total += 4.50 * cantidad;
break;
case 3: total += 9.98 * cantidad;
break;
case 4: total += 4.49 * cantidad;
break;
case 5: total += 6.87 * cantidad;
break;
default:
printf("\n\nEl n%cmero de producto no es el correcto\n", 163);
printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (-1 en producto para terminar):\n", 163, 161);
break;
} // Fin switch//
} //Fin de while //
printf("\n\nEl valor total de ventas es de %.2f $\n\n", total);
system("pause");
return 0;
}
He conseguido hacer el ejercicio usando este otro codigo, pero me interesaría saber hacerlo con getchar.
// Ejercicio 4.19: uso de la instrucción switch //
#include <stdio.h>
main()
{
int numprod, cantidad;
float total = 0;
printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (-1 en producto para terminar):\n", 163, 161);
scanf("%d", &numprod);
while (numprod != -1) {
scanf("%d", &cantidad);
switch (numprod) {
case 1: total += 2.98 * cantidad;
break;
case 2: total += 4.50 * cantidad;
break;
case 3: total += 9.98 * cantidad;
break;
case 4: total += 4.49 * cantidad;
break;
case 5: total += 6.87 * cantidad;
break;
default:
printf("\n\nEl n%cmero de producto no es el correcto\n", 163);
printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (-1 en producto para terminar):\n", 163, 161);
break;
} // Fin switch//
scanf("%d", &numprod);
} //Fin de while //
printf("\n\nEl valor total de ventas es de %.2f $\n\n", total);
system("pause");
return 0;
}
Gracias por todo
-
No estoy seguro de que usar EOF sea correcto ¿por qué usas EOF?
Existen problemas con la conversión de tipos con getchar y scanf debido a que el salto de línea cuando pulsas enter queda almacenado en el buffer y se asigna a la siguiente petición de datos, esto son detalles internos de c. (Por eso en el siguiente código he introducido saltoLinea = getchar(); para absorber ese caracter \n):
// Ejercicio 4.19: uso de la instrucción switch //
#include <stdio.h>
int main() {
int numprod='0';
char saltoLinea;
int cantidad=0;
float total = 0;
saltoLinea = '1';
printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (- en producto y cantidad para terminar):\n", 163, 161);
while ( numprod != '-') {
printf("Por favor introduzca numero de producto:");
numprod = getchar();
saltoLinea = getchar();
printf("Por favor introduzca cantidad vendida:");
scanf("%d", &cantidad);
saltoLinea = getchar();
switch (numprod) {
printf("numprod vale ahora %c", numprod);
case '1':
total += 2.98 * cantidad;
break;
case '2':
total += 4.50 * cantidad;
break;
case '3':
total += 9.98 * cantidad;
break;
case '4':
total += 4.49 * cantidad;
break;
case '5':
total += 6.87 * cantidad;
break;
case '-':
break;
default:
printf("\n\nEl n%cmero de producto no es el correcto\n", 163);
printf("Por favor introduzca el n%cmero de producto y la cantidad vendida durante el d%ca (-1 en producto para terminar):\n", 163, 161);
break;
} // Fin switch//
} //Fin de while //
printf("\n\nEl valor total de ventas es de %.2f $\n\n", total);
//system("pause");
return 0;
}
-
Muchas gracias, lo que no entiendo es por qué usas la coma '0' en numprod y en salto de linea '1'. ¿Qué diferencia hay de ponerlo sin coma numprod = 0 ?
-
Esto ha sido un despiste: int numprod='0'; debido a que estaba probando con declarar numprod como char.
La comilla simple sería de aplicación cuando trabajas con caracteres (char). Si no usas la comilla simple en realidad no estás trabajando con un carácter, otra cosa es que el compilador realice la conversión automática y te lo permita...
-
Amm ok muchas gracias, esque no terminaba de entender el uso de la comilla simple, pero ya me lo has dejado todo claro.
Gracias por todo