Dev - C++ - a la hora de hacer la eleccion de cinco opciones no me toma ninguna

 
Vista:
sin imagen de perfil

a la hora de hacer la eleccion de cinco opciones no me toma ninguna

Publicado por ybes chavarro (3 intervenciones) el 03/09/2021 02:51:18
#include <stdio.h>
#include <clocale>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>
struct nomina{
float Codigo;
char Nombre[40];
char Nivel [12];
float Sueldo_bruto;
float Exencion_de_impuesto;
int Anos_de_exp;
float Impuesto;
};
int main() {
setlocale(LC_CTYPE,"Spanish");
float complemento;
float busqueda, modificar;
int trabajadores,eleccion;
printf("escribir el numero de empleados\n");
scanf("%d",&trabajadores);
struct nomina empleados[trabajadores];
for (int i = 0; i < trabajadores; i++){
printf("Escriba el Nombre del empleado %i \n", i+1);
scanf ("%s",&empleados[i].Nombre);

printf ("Escriba el código del empleado %i \n",i+1);
scanf ("%f",&empleados[i].Codigo);

printf ("Escriba el nivel del empleado %i \n",i+1);
scanf("%s",&empleados[i].Nivel);

printf ("Escriba el sueldo bruto del empleado %i \n",i+1);
scanf("%f",&empleados[i].Sueldo_bruto);

printf ("Escriba la exención del impuesto del empleado %i \n",i+1);
scanf("%f",&empleados[i].Exencion_de_impuesto);

printf ("Escriba los años de antigüedad del empleado %i \n",i+1);
scanf("%d",&empleados[i].Anos_de_exp);
fflush (stdin);
}
int i=0;
if (strcmp(empleados[i].Nivel,"oficinista")==0) {
complemento=150000;
empleados[i].Sueldo_bruto=complemento+empleados[i].Sueldo_bruto;
}
else{
if (strcmp(empleados[i].Nivel,"directivo ")==0){
complemento=150000;
empleados[i].Sueldo_bruto=complemento+empleados[i].Sueldo_bruto;
}
else {
complemento=0;
empleados[i].Sueldo_bruto=complemento+empleados[i].Sueldo_bruto;
}
}
printf ("hola vamos bien \n");
//El impuesto se deduce según la fórmula: (sueldo bruto total - exención) * 0,33.
empleados[i].Impuesto=((empleados[i].Sueldo_bruto-empleados[i].Exencion_de_impuesto)*0.33);
// escribir todos los datos

// realizar las operaciones siguientes:
printf ("Menu de opciones\n");
printf ("Opción 1 = Crear archivo\n");
printf ("Opción 2 = Buscar registros con el código del empleado\n");
printf ("Opción 3 = Modificar registro a traevez del código del empleado\n");
printf ("Opción 4 = Añadir año de antigüedad a todos los empleados\n");
printf ("Opción 5 = listado de los trabajadores\n");
printf ("Escribe la acción que deses hacer\n");
scanf("%i\n",&eleccion);
//no toma las elecciones, quien sabe porque
if (eleccion==1){
for (int i = 0; i < trabajadores; i++){
printf("Escriba el Nombre del empleado %i \n", i+1);
scanf ("%s",&empleados[i].Nombre);

printf ("Escriba el código del empleado %i \n",i+1);
scanf ("%f",&empleados[i].Codigo);

printf ("Escriba el nivel del empleado %i \n",i+1);
scanf("%s",&empleados[i].Nivel);

printf ("Escriba el sueldo bruto del empleado %i \n",i+1);
scanf("%f",&empleados[i].Sueldo_bruto);

printf ("Escriba la exención del impuesto del empleado %i \n",i+1);
scanf("%f",&empleados[i].Exencion_de_impuesto);

printf ("Escriba los años de antigüedad del empleado %i \n",i+1);
scanf("%d",&empleados[i].Anos_de_exp);
fflush (stdin);
}
}
if(eleccion==2){
printf ("hola vamos bien \n");
printf ("Digite el codigo que buscas");
scanf ("%f",&busqueda);
do{
int i;
i=0;
i++;
if (busqueda==empleados[i].Codigo){
printf ("Datos de empleados %i\n",i+1);
printf ("El nombre del empleado es: %s\n",empleados[i].Nombre);
printf ("El código del empleado es: %.0f\n",empleados[i].Codigo);
printf ("El nivel del empleado es: %s\n",empleados[i].Nivel);
printf ("El sueldo bruto del empleado es: %.2f\n",empleados[i].Sueldo_bruto);
printf ("La exención del impuesto del empleado es: %.2f\n",empleados[i].Exencion_de_impuesto);
printf ("los años de antigüedad del empleado es : %d\n",empleados[i].Anos_de_exp);
printf ("El impuesto del empleado es: %f\n",empleados[i].Impuesto);
printf ("Si es directivo o ofinista es de; 150000 ");
fflush (stdin);
}
}
while (i<trabajadores);
}
if (eleccion==3){
printf ("hola vamos bien \n");
printf("ingresa tu codigo para modificar\n");
scanf("%f",&modificar);
do{
int i;
i=0;
i++;
if (modificar==empleados[i].Codigo){
printf ("Datos de empleados %i\n",i+1);
printf ("El nombre del empleado es: %s\n",empleados[i].Nombre);
printf ("El código del empleado es: %.0f\n",empleados[i].Codigo);
printf ("El nivel del empleado es: %s\n",empleados[i].Nivel);
printf ("El sueldo bruto del empleado es: %.2f\n",empleados[i].Sueldo_bruto);
printf ("La exención del impuesto del empleado es: %.2f\n",empleados[i].Exencion_de_impuesto);
printf ("los años de antigüedad del empleado es : %d\n",empleados[i].Anos_de_exp);
printf ("El impuesto del empleado es: %f\n",empleados[i].Impuesto);
printf ("Si es directivo o ofinista es de; 150000 ");
fflush (stdin);
}
}
while (i<trabajadores);
}
if (eleccion==4){
do{
int i;
i=0;
i++;
empleados[i].Anos_de_exp=empleados[i].Anos_de_exp+1;
printf("Se han aumentado en 1 año los años de experiencia de todos los trabajadores",empleados[i].Anos_de_exp);
}
while(i < trabajadores);
}
if (eleccion==5){
for (int i=0;i<trabajadores;i++){
printf ("Datos de empleados %i\n",i+1);
printf ("El nombre del empleado es: %s\n",empleados[i].Nombre);
printf ("El código del empleado es: %.0f\n",empleados[i].Codigo);
printf ("El nivel del empleado es: %s\n",empleados[i].Nivel);
printf ("El sueldo bruto del empleado es: %.2f\n",empleados[i].Sueldo_bruto);
printf ("La exención del impuesto del empleado es: %.2f\n",empleados[i].Exencion_de_impuesto);
printf ("los años de antigüedad del empleado es : %d\n",empleados[i].Anos_de_exp);
printf ("El impuesto del empleado es: %f\n",empleados[i].Impuesto);
printf ("Si es directivo o ofinista es de; 150000 ");
fflush (stdin);
}
}
else {
printf("error");
}
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
sin imagen de perfil

a la hora de hacer la eleccion de cinco opciones no me toma ninguna

Publicado por anonymous (146 intervenciones) el 03/09/2021 03:25:18
Hola, puede haber más de una causa para lo que te sucede, como no puedo probar tu código para decirte con exactitud que pasa, aquí te dejo algunas recomendaciones para que sigas:

-Escribe instrucciones para imprimir cada valor escaneado, de esa manera podrás ver si algo no funciona y corregirlo (Temporalmente después las borras). [RECOMENDADO]

-Vacía el búfer de entrada cada vez antes de que vayas a leer caracteres desde la consola, es decir con `fflush(stdin)'. [RECOMENDADO]

-Cambia el formato "%d" por "%i" quizás te sirva, aunque esto no debería afectar.

-Suprime momentáneamente instrucciones como `setlocale(LC_CTYPE,"Spanish")' quizás estén afectando en algo, aunque no creo pero por si acaso.

-Utiliza un depurador para descartar cualquier otro problema.

En mi opinión como mínimo deberías imprimir el valor de la variable `eleccion' inmediatamente de ser escaneada para que tengas una mejor idea de que sucede, por ejemplo si ves que vale 10 o 13 entonces definitivamente tienes que vaciar el buffer antes de escanear la variable en cuestión; Con eso debería ser suficiente. Si no te funciona o si ves que la variable tiene otro valor, avísame por este medio a ver que se puede hacer. Suerte, 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
sin imagen de perfil

a la hora de hacer la eleccion de cinco opciones no me toma ninguna

Publicado por ybes (3 intervenciones) el 03/09/2021 03:32:04
pongo (lo de abajo) antes de elección cierto?
fflush (stdin);
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
sin imagen de perfil

a la hora de hacer la eleccion de cinco opciones no me toma ninguna

Publicado por anonymous (146 intervenciones) el 03/09/2021 03:35:10
Si escríbelo antes de la instrucción de scanf, si no te funciona imprime el valor de la variable y me dices que te da.
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
sin imagen de perfil

a la hora de hacer la eleccion de cinco opciones no me toma ninguna

Publicado por ybes (3 intervenciones) el 03/09/2021 05:05:56
ya pude resolverlo con un amigo me quedo asi
//Una compañía guarda un archivo de nóminas con los siguientes datos de N empleados:
//Código del Empleado, Nombre del empleado, Nivel (directivo, oficios varios, oficinista, vendedores).
//Se debe el nombre completo del Nivel, Sueldo bruto,Exención de impuesto, Años de antigüedad en la empresa.
//Si el nivel es de oficinista o directivo lleva un complemento en el sueldo.
//Este complemento es una cantidad constante igual para todos.
//El archivo se empleará para imprimir los recibos de las nóminas. Con todos los datos de cada empleado,
//el sueldo bruto total que cobran es Sueldo bruto + Complemento.
//El impuesto se deduce según la fórmula: (sueldo bruto total – exención) * 0,33.
//Escribe la estructura de datos más adecuada a utilizar. Utiliza una estructura, si desea un vector,
// por lo menos se deben utilizar dos ciclos repetitivos. Escribir un programa que permita, mediante un menú,
//realizar las operaciones siguientes:
//Crear el archivo, Buscar registros con el código del empleado, Modifique los valores de un registro por el código de empleado,
//Añada un año de antigüedad a todos los empleados.
//Muestre un listado del siguiente tipo:
//Nivel, Nombre, Sueldo, Complemento, Total sueldo bruto, Exención Impuesto, Sueldo neto

#include <stdio.h>
#include <clocale>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>

struct nomina{
float Codigo;
char Nombre[40];
char Nivel [12];
float Sueldo_bruto;
float Exencion_de_impuesto;
int Anos_de_exp;
float Impuesto;
};
int main() {
setlocale(LC_CTYPE,"Spanish");
float complemento;
float busqueda, modificar;
int trabajadores,eleccion;
printf("escribir el numero de empleados\n");
scanf("%d",&trabajadores);
struct nomina empleados[trabajadores];
for (int i = 0; i < trabajadores; i++){
printf("Escriba el Nombre del empleado %i \n", i+1);
scanf ("%s",&empleados[i].Nombre);

printf ("Escriba el código del empleado %i \n",i+1);
scanf ("%f",&empleados[i].Codigo);

printf ("Escriba el nivel del empleado %i \n",i+1);
scanf("%s",&empleados[i].Nivel);

printf ("Escriba el sueldo bruto del empleado %i \n",i+1);
scanf("%f",&empleados[i].Sueldo_bruto);

printf ("Escriba la exención del impuesto del empleado %i \n",i+1);
scanf("%f",&empleados[i].Exencion_de_impuesto);

printf ("Escriba los años de antigüedad del empleado %i \n",i+1);
scanf("%d",&empleados[i].Anos_de_exp);
fflush (stdin);
}
fflush (stdin);
int i=0;
if (strcmp(empleados[i].Nivel,"oficinista")==0) {
complemento=150000;
empleados[i].Sueldo_bruto=complemento+empleados[i].Sueldo_bruto;
}
else{
if (strcmp(empleados[i].Nivel,"directivo ")==0){
complemento=150000;
empleados[i].Sueldo_bruto=complemento+empleados[i].Sueldo_bruto;
}
else {
complemento=0;
empleados[i].Sueldo_bruto=complemento+empleados[i].Sueldo_bruto;
}
}
//El impuesto se deduce según la fórmula: (sueldo bruto total - exención) * 0,33.
empleados[i].Impuesto=((empleados[i].Sueldo_bruto-empleados[i].Exencion_de_impuesto)*0.33);
// escribir todos los datos
// realizar las operaciones siguientes:
printf ("Menu de opciones\n");
printf ("Opción 1 = Crear archivo\n");
printf ("Opción 2 = Buscar registros con el código del empleado\n");
printf ("Opción 3 = Modificar registro a traevez del código del empleado\n");
printf ("Opción 4 = Añadir año de antigüedad a todos los empleados\n");
printf ("Opción 5 = listado de los trabajadores\n");
printf ("Escribe la acción que deses hacer\n");
scanf("%d",&eleccion);
printf("%d",eleccion);
if (eleccion==1){
for (int i = 0; i < trabajadores; i++){
printf("Escriba el Nombre del empleado %i \n", i+1);
scanf ("%s",&empleados[i].Nombre);

printf ("Escriba el código del empleado %i \n",i+1);
scanf ("%f",&empleados[i].Codigo);

printf ("Escriba el nivel del empleado %i \n",i+1);
scanf("%s",&empleados[i].Nivel);

printf ("Escriba el sueldo bruto del empleado %i \n",i+1);
scanf("%f",&empleados[i].Sueldo_bruto);

printf ("Escriba la exención del impuesto del empleado %i \n",i+1);
scanf("%f",&empleados[i].Exencion_de_impuesto);

printf ("Escriba los años de antigüedad del empleado %i \n",i+1);
scanf("%d",&empleados[i].Anos_de_exp);
fflush (stdin);
}
}
if(eleccion==2){
printf ("hola vamos bien \n");
printf ("Digite el codigo que buscas\n");
scanf ("%f",&busqueda);
for (int i = 0; i < trabajadores; i++){
if (busqueda==empleados[i].Codigo){
printf ("Datos de empleados %i\n",i+1);
printf ("El nombre del empleado es: %s\n",empleados[i].Nombre);
printf ("El código del empleado es: %.0f\n",empleados[i].Codigo);
printf ("El nivel del empleado es: %s\n",empleados[i].Nivel);
printf ("El sueldo bruto del empleado es: %.2f\n",empleados[i].Sueldo_bruto);
printf ("La exención del impuesto del empleado es: %.2f\n",empleados[i].Exencion_de_impuesto);
printf ("los años de antigüedad del empleado es : %d\n",empleados[i].Anos_de_exp);
printf ("El impuesto del empleado es: %f\n",empleados[i].Impuesto);
printf ("Si es directivo o ofinista la bonificacion es de 150000 ");
fflush (stdin);
}
}
}
if (eleccion==3){
printf ("hola vamos bien \n");
printf("ingresa tu codigo para modificar\n");
scanf("%f",&modificar);
do{
int i,cambio;
i=0;
i++;
if (modificar==empleados[i].Codigo){
printf ("Digite 1 si desea cambiar el nombre del empleado");
printf ("Digite 2 si desea cambiar el código del empleado");
printf ("Digite 3 si desea cambiar el nivel del empleado");
printf ("Digite 4 si desea cambiar sueldo bruto del empleado");
printf ("Digite 5 si desea cambiar exención del impuesto del empleado");
printf ("Digite 6 si desea cambiar los años de antigüedad del empleado");
printf ("Digite la opcción");
scanf("%d",cambio);
}
if (cambio==1){
char nuevo_n[40];
printf ("Digite el nuevo nombre");
scanf ("%s",&nuevo_n);
strcpy(nuevo_n,empleados[i].Nombre);
}
if (cambio==2){
float nuevo_c;
printf ("Digite el nuevo código");
scanf("%f",&nuevo_c);
empleados[i].Codigo=nuevo_c;
}
if (cambio==3){
char nuevo_up[20];
printf ("Digite el nuevo nivel");
scanf ("%s",&nuevo_up);
strcpy(nuevo_up, empleados[i].Nivel);
}
if (cambio==4){
float nuevo_s;
printf ("Digite el nuevo sueldo bruto");
scanf("%f",&nuevo_s);
empleados[i].Sueldo_bruto=nuevo_s;
}
if (cambio==5){
float nuevo_im;
printf ("Digite el nuevo exención del impuesto");
scanf("%f",&nuevo_im);
empleados[i].Exencion_de_impuesto=nuevo_im;
}
if (cambio==6){
float nuevo_a;
printf ("Digite el nuevo año");
scanf("%f",&nuevo_a);
empleados[i].Anos_de_exp=nuevo_a;
}
}
while (i<trabajadores);
}


if (eleccion==4){
for (int i = 0; i < trabajadores; i++){
empleados[i].Anos_de_exp=empleados[i].Anos_de_exp+1;
printf("Se han aumentado en 1 año de experiencia al trabajador numero %d, sus años de experiencia es: %d\n",trabajadores,empleados[i].Anos_de_exp);
}
}
if (eleccion==5){
for (int i=0;i<trabajadores;i++){
printf ("Datos de empleados %i\n",i+1);
printf ("El nombre del empleado es: %s\n",empleados[i].Nombre);
printf ("El código del empleado es: %.0f\n",empleados[i].Codigo);
printf ("El nivel del empleado es: %s\n",empleados[i].Nivel);
printf ("El sueldo bruto del empleado es: %.2f\n",empleados[i].Sueldo_bruto);
printf ("La exención del impuesto del empleado es: %.2f\n",empleados[i].Exencion_de_impuesto);
printf ("los años de antigüedad del empleado es : %d\n",empleados[i].Anos_de_exp);
printf ("El impuesto del empleado es: %.2f\n",empleados[i].Impuesto);
printf ("Si es directivo o ofinista es de; 150000 ");
fflush (stdin);
}
}
else {
printf("Fin del sistema\n");
}
return 0;
}
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
sin imagen de perfil

a la hora de hacer la eleccion de cinco opciones no me toma ninguna

Publicado por anonymous (146 intervenciones) el 03/09/2021 05:10:12
Ah que bueno me alegro por ti, ya sabes cualquier otra cosa estoy a la orden.
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