使用带有箭头运算符的 gets 获取输入不起作用?错误是什么?

taking input using gets with arrow operator not working? What's the Error?

这里有什么错误? 我尝试使用箭头运算符获取输入。

#include <stdio.h>

typedef struct{
  char name[100];
  int salary;
}emp;

void inp(emp *e){
  printf("enter name : ");
  gets(e->name);
  printf("enter salary : ");
  scanf("%d", e->salary);
}
int main() {
    emp *e1,*e2;
    inp(e1);
    inp(e2);
    printf("%s , %d\n", e1->name,e1->salary);
    printf("%s , %d\n", e2->name,e2->salary);
  return 0;
}

我试过将 & 甚至给 inp 函数作为 emp,但它不起作用。 它只是问我第一个员工的名字。就是这样! 甚至不打印输入工资。 我应该做哪些改变?

emp *e1,*e2;

创建两个不指向任何内容的指针...它们只是未初始化的指针。他们没有指向任何有效的内存。因此,当您使用 -> 取消引用它们时,您的程序可能会崩溃。

您需要分配内存,例如malloc

喜欢

e1 = malloc(sizeof *e1);

你应该先为你的函数取一个更好的名字,inp在c中已经是一个函数名了,看这个:https://cboard.cprogramming.com/c-programming/21255-ansi-c-function-inp-outp-inp-inpw.html

您的 struc 创建有误。所以我像这样更改了您的代码以使其清楚。我也确实使用了 getchar() 函数,因此您可以多次调用 fget() 函数。我想它确实如您所愿。

#include <stdio.h>

struct Emp{
  char name[100];
  int salary;
};

void func(struct Emp *e){
  printf("enter name : ");
  fgets(e->name, sizeof(e->name), stdin);
  printf("enter salary : ");
  scanf("%d", &e->salary);
  getchar();
}
int main() {
    struct Emp e1,e2;
    func(&e1);
    func(&e2);
    printf("\n%s , %d", e1.name,e1.salary);
    printf("\n%s , %d", e2.name,e2.salary);
  return 0;
}