我正在使用C编程语言创建一个简单的程序。不幸的是,我现在对一段源代码有疑问。运行该程序后,我无法在学生结构中存储数据。
我认为问题是ADD_Students()函数中的gets()函数。 (第60行)
这是我的源代码:(在Windows 10中与gnu gcc编译器一起使用的代码块)
#include <stdio.h>
#include <string.h>
#define TRUE 1
#define MAX 3
struct Students
{
char * Name;
char * Field;
char * City;
unsigned int Student_ID;
float Mark;
}Addr_INFO[MAX];
char Menu();
void ADD_Students();
void DEL_Students();
void EDT_Students();
int main()
{
char Selected_ITEM;
while (TRUE)
{
Selected_ITEM = Menu();
switch (Selected_ITEM)
{
case '1' : ADD_Students(); break;
case '2' : DEL_Students(); break;
case '3' : EDT_Students(); break;
default : printf("Wrong number!\n"); exit(0);
}
}
}
char Menu()
{
char Chose;
printf(".----------+ Students information management +----------.\n\n");
printf("[1]. ADD student\n");
printf("[2]. DEL student\n");
printf("[3]. EDT student\n\n");
printf("Please enter your choice: ");
scanf("%c", &Chose);
return Chose;
}
void ADD_Students()
{
register int i;
for (i = 0; i < MAX; i++)
{
printf("[S-%d]. Name: ", i);
gets(Addr_INFO[i].Name);
printf("[S-%d]. Field: ", i);
gets(Addr_INFO[i].Field);
printf("[S-%d]. City: ", i);
gets(Addr_INFO[i].City);
printf("[S-%d]. ID: ", i);
scanf("%d", &Addr_INFO[i].Student_ID);
printf("[S-%d]. Mark: ", i);
scanf("%.2f", &Addr_INFO[i].Mark);
printf("\n");
}
}
void DEL_Students()
{
printf("Test2");
}
void EDT_Students()
{
printf("Test3");
}
怎么回事?
为什么会这样?
输出
.----------+ Students information management +----------.
[1]. ADD student
[2]. DEL student
[3]. EDT student
Please enter your choice: 1
[S-0]. Name: [S-0]. Field: [S-0]. City: [S-0]. ID:
.----------+ Students information management +----------.
[1]. ADD student
[2]. DEL student
[3]. EDT student
Please enter your choice: 1
[S-0]. Name: [S-0]. Field: [S-0]. City: [S-0]. ID: