Dev - C++ - Problemas con código. AYUDA URGE TnT

 
Vista:

Problemas con código. AYUDA URGE TnT

Publicado por Guadalupe (1 intervención) el 05/05/2016 02:45:54
No se que tiene el programa se supone que debe pedir 10 veces a los alumnos datos pero esta raro y no se porque se sale. Me podrían ayudar por favor.

P.D. Soy nueva en esto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <stdio.h>
#include <stdlib.h>
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
main(int argc, char *argv[]) {
 
	int control;
	int menu;
	int turnoalumno;
	int matutino=0;
	int vespertino=0;
	int nocturno=0;
	int contador=0;
    char nombrealumno[30];
	char carrera[40];
    float suma=0;
	float promgen;
	float prom;
	float alta=0;
 
	do{
 
		printf("Dame tu nombre completo empezando por apellido: \n");
		scanf("%s",nombrealumno);
 
		printf("Dame tu numero de control: \n");
		scanf("%d",control);
 
		printf("Dame la carrera que cursas: \n");
		scanf("%s",carrera);
 
		printf("Dame tu promedio general: \n");
		scanf("%f",promgen);
		suma=suma+promgen;
 
		printf("Dame el turno en el que te encuentras:\n 1.Matutino\n 2.Vespertino\n 3.Nocturno\n");
		if(turnoalumno==1)
		{
			matutino=matutino+1;
		}
		else if(turnoalumno==2)
		{
			vespertino=vespertino+1;
		}
		else if(turnoalumno==3)
		{
			nocturno=nocturno+1;
		}
 
		contador = contador + 1;
 
	}while(contador<10);
 
	do
	{
		printf("Menú de opciones \n");
		printf("1. Obtener promedio general alumnos\n");
		printf("2. Obtener el nombre del alumno con el promedio más alto de la escuela\n");
		printf("3. Determinar el turno que tiene más alumnos inscritos\n");
		printf("4. Salir\n");
		scanf("%d",menu);
 
		switch(menu)
		{
			case 1:
				prom=suma/10;
				break;
 
			case 2:
				while(alta>promgen)
				{
					alta=promgen;
				}
 
				printf("El promedio más alto fue de: %f\n",alta);
 
				break;
 
			case 3:
				if(matutino>vespertino&&matutino>nocturno)
				{
					printf("Hay más alumnos inscritos en el turno matutino.\n");
				}
				else if(vespertino>matutino&&vespertino>nocturno)
				{
					printf("Hay más alumnos inscritos en el turno vespertino.\n");
				}
				else if(nocturno>matutino&&nocturno>vespertino)
				{
					printf("Hay más alumnos inscritos en el turno nocturno.\n");
				}
				break;
 
			case 4: exit(0);
		}
 
	}while(menu!=4);
 
	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
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas con código. AYUDA URGE TnT

Publicado por agustin (522 intervenciones) el 06/05/2016 03:03:00
Sobre lo que preguntas la causa puede ser esto:
1
2
printf("Dame tu nombre completo empezando por apellido: \n");
scanf("%s",nombrealumno);
scanf en este caso captura del stream de entrada hasta encontrar un \n o un espacio. Si introduces " Pérez Martínez Francisco Jose" solo cogería "Perez" y el resto se quedaría en el buffer y a la siguiente vez que uses alguna función que obtenga algo de ese stream seguirá sacando lo que hay ya. Si quieres obtener una cadena con espacios usa fgets (nombrealumno, sizeof (nombrealumno ),stdin).
Además creo que ese array debería ser de más Tamaño. Imagina una alumna llamada "Maria de la Concepción Fernández del Caudillo", con eso nos vamos a 45 caracteres más el de fin de cadena serian 46, muy lejos de los 30 que le tienes asignado con lo que habría un desbordamiento y el comportamiento de la aplicación seria un misterio jejeje. Yo le pondría 100 para curarme en salud aunque con fgets no desbordaria porque cortaría hasta el máximo indicado dejando el resto en el stream. Además te aconsejo que después de usar fgets compruebes que el último carácter del nombre sea \n y si no es asi limpies el stream.
Para turnoalumno es mejor que uses un switch.
Por cierto:
matutino=matutino+1
Es lo mismo que:
matutino++
O si tienes que incrementar más de 1:
matutino += incremento
Lo digo porque es una forma más abreviada de hacer lo que haces y es bueno que vayas acostumbrandote.
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