Repites muchas veces el mismo código lo cual no es para nada eficiente. Tienes que pensar bien lo que quieres hacer antes de programar. Haz un esquema en un papel o algo por el estilo que te ayude a organizar la información.
Te dejo un ejemplo para que veas que se puede organizar mejor el código basándome en el primer código que publicaste. No está completo ya que lo que tienes bien te he puesto un comentario para que lo incluyas tú. Tampoco era plan de hacerlo todo. Espero que te sirva de ayuda porque no es algo que haga a menudo así que aprovéchalo.
Debes ver qué cosas quieres guardar y cuales no hace falta; por ejemplo no es necesario guardar el precio antes del descuento y después (si fuera necesario pues entonces sí, creas una variable <precio_inicial> y otra <precio_final>). Si quieres mostrar cuántos clientes han elegido la opción 2 no tiene mucho sentido mostrarlo al terminar cada iteración porque en este caso si la opción es 2, los clientes que habrán elegido la opción 2 son todos <numero_clientes> y si la opción no es 2, entonces ninguno. Lo lógico desde mi punto de vista sería mostrar eso al terminar el programa (entonces en cada vuelta si la opción es 2, acumulamos los clientes que han elegido esa opción).
A la hora de pedir las opciones hay un problema. Que pasa si el usuario introduce opciones no válidas?? O qué pasa si el usuario introduce <numero_clientes = 10000>??
Bueno lo segundo es fácil. Cambiamos la condición del <while> por un (numero_clientes < CLIENTES_EXIT) y listo.
Lo primero se suele solucionar con lo que se conoce como filtro. Un filtro es un bucle que pide un valor al usuario y se repite mientras el valor no sea válido, o sea básicamente un filtro que solo deja pasar valores válidos. Esto se implementa con un <do while>. Te dejo un ejemplo de un filtro para que solo deje pasar números positivos y pares. Como tarea te queda adaptarlo a ti a tu problema...
Te dejo un ejemplo para que veas que se puede organizar mejor el código basándome en el primer código que publicaste. No está completo ya que lo que tienes bien te he puesto un comentario para que lo incluyas tú. Tampoco era plan de hacerlo todo. Espero que te sirva de ayuda porque no es algo que haga a menudo así que aprovéchalo.
Debes ver qué cosas quieres guardar y cuales no hace falta; por ejemplo no es necesario guardar el precio antes del descuento y después (si fuera necesario pues entonces sí, creas una variable <precio_inicial> y otra <precio_final>). Si quieres mostrar cuántos clientes han elegido la opción 2 no tiene mucho sentido mostrarlo al terminar cada iteración porque en este caso si la opción es 2, los clientes que habrán elegido la opción 2 son todos <numero_clientes> y si la opción no es 2, entonces ninguno. Lo lógico desde mi punto de vista sería mostrar eso al terminar el programa (entonces en cada vuelta si la opción es 2, acumulamos los clientes que han elegido esa opción).
Código (c) [Seleccionar]
// creamos constantes globales para los precios ya que usar numeros sueltos que no se sabe lo que significa no es una buena practica
const int PRECIO_1 = 250;
const int PRECIO_2 = 255;
const int PRECIO_3 = 350; // supongo esto ya que en el ultimo mensaje es 250 igual que precio1
// constantes para los descuentos
const float DESCUENTO_1 = 0.15;
const float DESCUENTO_3 = 0.25;
// constante para determinar el valor que se usa para finalizar el programa
const int CLIENTES_EXIT = 9999;
int main(){
// creamos las variables que vamos a usar pensando bien en lo que necesitamos
int numero_clientes; // numero de clientes que van a "comprar" una de las opciones
int clientes_opcion2 = 0; // numero de clientes que eligen la opcion 2
int opcion_precio, opcion_pago; // opciones tanto de precio como de forma de pago
float precio, descuento; // precio de la compra (con decimales) y descuento aplicado
// pides el numero de clientes
while(numero_clientes != CLIENTES_EXIT){
// pides las opciones
// calculamos los precios segun el precio por cliente
if(opcion_precio == 1)
precio = numero_clientes * PRECIO_1;
else if(opcion_precio == 2)
precio = numero_clientes * PRECIO_2;
else
precio = numero_clientes * PRECIO_3;
// calculamos lo necesario segun el metodo de pago
if(opcion_pago == 1)
descuento = precio * DESCUENTO_1;
else if(opcion_pago == 3)
descuento = precio * DESCUENTO_3;
else // si no es la opcion 1 ni 3, entonces es la 2 (suponiendo que solo se admiten esos 3 valores)
clientes_opcion2 += numero_clientes; // equivalente a clientes_opcion2 = clientes_opcion2 + numero_clientes
// aplicamos el descuento
precio -= descuento; // equivalente a decir precio = precio - descuento
// mostramos los resultados
printf("El importe final es: %.2f\n", precio); // mostramos el precio con 2 decimales
// muestras el descuento de la misma manera (CUIDADO: si la opcion de pago es 2 se mostrara el descuento de la repeticion anterior ya que no se actualiza)
// pides numero de clientes nuevamente para repetir el programa
}
// llegamos aqui una vez que introducimos <numero_clientes = 9999>
printf("El numero de clientes que han elegido la opcion de pago 2 son: %d\n", clientes_opcion2);
}
A la hora de pedir las opciones hay un problema. Que pasa si el usuario introduce opciones no válidas?? O qué pasa si el usuario introduce <numero_clientes = 10000>??
Bueno lo segundo es fácil. Cambiamos la condición del <while> por un (numero_clientes < CLIENTES_EXIT) y listo.
Lo primero se suele solucionar con lo que se conoce como filtro. Un filtro es un bucle que pide un valor al usuario y se repite mientras el valor no sea válido, o sea básicamente un filtro que solo deja pasar valores válidos. Esto se implementa con un <do while>. Te dejo un ejemplo de un filtro para que solo deje pasar números positivos y pares. Como tarea te queda adaptarlo a ti a tu problema...
Código (c) [Seleccionar]
int numero;
do{ // hacer lo que hay dentro del bucle (pedir un valor)...
printf("Introduce un numero par y positivo: ");
scanf("%d", &numero);
} while(numero < 0 || numero % 2 != 0); // ... mientras el numero sea menor que 0 o sea impar
// cuando un valor pase el filtro llegamos aqui y podemos asegurar que ese valor es positivo y par
printf("El numero introducido es: %d\n", numero);