无法将用户输入保存到变量中

标签 c function insert

大家好,我正在做作业,但遇到了一些问题。

这是我的变量:

struct student
{
    int facN;
    char name[MAX_LENGHT + 1];
    char prezime[MAX_LENGHT + 1];
    char familiq[MAX_LENGHT + 1];
    char specialnost[MAX_LENGHT + 1];
    int group;
    int kurs;
};
typedef struct student BODY;

输入的函数是:

int enterBody(BODY *ps)
{
    if (ps == NULL) return 0;
    memset(ps, 0, sizeof(BODY));

    fflush(stdin);
    printf("\nFaculty No: ");
    scanf("%d", &(ps->facN));
    //fflush(stdin);

    printf("\nName: ");
    gets(ps->name);

    printf("\nPrezime: ");
    gets(ps->prezime);

    printf("\nFamiliq: ");
    gets(ps->familiq);

    printf("\nSpecialnost: ");
    gets(ps->specialnost);

    printf("\ngrupa: ");
    gets(ps->group);

    printf("\kurs: ");
    gets(ps->kurs);

    return 1;
}

主要问题是当我运行程序时,我无法让 Prezime 和其他程序进入屏幕,然后将输入保存到变量中。

最佳答案

  1. fflush(stdin); 会调用未定义的行为,因此您应该删除这些语句。
  2. memset()该结构没有任何意义,因为它最终会被数据填充。
  3. 使用 scanf("%d%*c", &var); 而不是 gets() 来输入 int 字段。添加 %*c 以丢弃 '\n' 字符。
  4. gets() 没有缓冲区溢出保护,因此请调用 fgets()。另外,使用 strcspn() 删除 fgets() 写入的尾部 '\n'
  5. 我想你的意思是printf("\nkurs: ");

精炼代码:

int enterBody(BODY *ps)
{
    if (ps == NULL)
        return 0;

    printf("\nFaculty No: ");
    scanf(" %d%*c", &ps->facN);

    printf("\nName: ");
    fgets(ps->name, MAX_LENGHT + 1, stdin);
    (ps->name)[strcspn((ps->name), "\n")] = '\0';

    printf("\nPrezime: ");
    fgets(ps->prezume, MAX_LENGHT + 1, stdin);
    (ps->prezume)[strcspn((ps->prezume), "\n")] = '\0';

    printf("\nFamiliq: ");
    fgets(ps->familiq, MAX_LENGHT + 1, stdin);
    (ps->familiq)[strcspn((ps->familiq), "\n")] = '\0';

    printf("\nSpecialnost: ");
    fgets(ps->specialnost, MAX_LENGHT + 1, stdin);
    (ps->specialnost)[strcspn((ps->specialnost), "\n")] = '\0';

    printf("\ngrupa: ");
    scanf(" %d%*c", &ps->group);

    printf("\nkurs: ");
    scanf(" %d%*c", &ps->kurs);

    return 1;
}

关于无法将用户输入保存到变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749846/

相关文章:

MySQL INSERT INTO 查询在 C 中太慢

java - 插入具有多对一关系的 Hibernate 实体

php - MYSQL,插入有效但无法连接

c - 类型 "char (*)[16]"的参数与类型 "const char *"的参数不兼容

php - 使用 Javascript 跟踪每个 div 独有的函数

c - 不兼容的 C 指针

function - VBScript BrowseForFile() 函数 - 如何指定文件类型?

c# - SQLiteFunction简单不工作

c - 通过解析/bin/ps的输出得到PID

c - 使用线程安全库