这个典型的学生管理案例让我发疯 我必须完成scanf到一个结构数组 在第一次扫描后我得到分段错误。 我几乎可以肯定我需要malloc的东西 但自从昨天以来我一直在努力,我真的需要帮助 %d scanf中的问题是我编辑程序错误在这里发布.. 现在我设法发布完整..
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
const int cantidadalumnos = 50;
const int cantidadmaterias = 300;
struct AlumnoData
{
int padron;
int dni;
char apellido[20];
char nombres[20];
int edad;
char dir[30];
char localidad [20];
char provincia [20];
int ingreso;
int codcar;
};
struct MateriaData
{
int codmat;
char Materia[20];
int anio;
int cuat;
int numcurso [20];
int nota;
int libro;
int folio;
};
int main()
{
int indicealumno;
indicealumno = 0;
int indicemateria;
struct AlumnoData alumno[cantidadalumnos];
struct MateriaData materia [cantidadmaterias];
char opcion;
int intop;
do
{
printf ("\n\n\n\n\n\n\##### Gestion de alumnos #####\n/ / / / / / / / / / / / / / /");
printf ("\n 1. Ingresar alumno");
printf ("\n 2. Buscar un alumno por padron");
opcion = getch();
intop = opcion;
switch (intop)
{
case '1' :
printf ("-------------INGRESO DE ALUMNO\n---------------------------\n");
for (indicealumno = 0 ; indicealumno<cantidadalumnos; indicealumno++)
{
printf("La cantidad de alumnos hasta el momento es de %d de %d", indicealumno, cantidadalumnos);
printf("\nPadron:");
scanf("%d", alumno[indicealumno].padron);
break;
};
break;
}
}
while (opcion !=27);
}
答案 0 :(得分:1)
%d
格式字符串用于读取int
但您正在尝试读取字符串。请尝试将格式字符串更改为正确的%s
。请注意,我还包含了一个 width 说明符,以避免输入缓冲区溢出。
scanf("%19s", alumno[stdindex].name);
修改已更新的问题:
scanf()
函数需要接收值的变量的地址。这允许函数修改变量的内容。您读取padron
值的行应为:
scanf("%d", &alumno[indicealumno].padron);
请注意在第二个参数之前添加的&
(address-of)运算符。
答案 1 :(得分:0)
使用此
scanf("%s",alumno[stdindex].name);
因为name是字符数组,您最有可能将名称视为字符串,因此应使用%s
代替%d
。
使用fgets
获得更好的结果。 Thanx到@mafso
答案 2 :(得分:0)
您正在将scanf
与getch
混合。所以在调用scanf
(要求你点击Return)之后,输入流中仍然有一个Return字符。假设输入流中没有其他额外字符,在getch
之后再次调用scanf
吃掉返回字符就足够了。
更易于管理的解决方案是使用scanf("%d", &opcion)
并将case '1':
更改为case 1:
。或者,您可以将scanf("%c")
与char
变量一起使用。
编辑:我认为Blastfurnace已经确定了您当前的问题。但是我提出这个问题会很快给你带来麻烦。