C语言中的gets函数有问题

问题描述 投票:-2回答:2

我正在使用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:
c structure fgets gets
2个回答
-4
投票
.----------+ 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:
© www.soinside.com 2019 - 2024. All rights reserved.