·
#include __FILE__

第二个printf函数那里的%th改为%dth(猜测的)

第二个scanfp->salary应该传地址,否则读不进值,然后还产生各种问题

我测试时未传地址在VS2022会给出警告,内容如下:(忽略scanf返回值未使用警告)

C6066 传递了非指针作为 _Param_(4),而对“scanf”的调用需要指针参数,实际类型: “float”
C4477 “scanf”: 格式字符串“%f”需要类型“float *”的参数,但可变参数 3 拥有了类型“double”

仔细看就能发现问题

VSCode中使用clangd扩展给出警告,如下:

Format specifies type 'float *' but the argument has type 'double'clang(-Wformat)

Shell中使用gcc编译打开所有警告的命令如下:

gcc -o 2.exe 2.c -Wall

警告如下:

2.c: In function 'main':
2.c:20:29: warning: format '%f' expects argument of type 'float *', but argument 4 has type 'double' [-Wformat=]
   20 |                 scanf("%s%s%f", p->num, p->name, p->salary);
      |                            ~^                    ~~~~~~~~~
      |                             |                     |
      |                             float *               double
2.c:20:29: warning: format '%f' expects argument of type 'float *', but argument 4 has type 'double' [-Wformat=]
   20 |                 scanf("%s%s%f", p->num, p->name, p->salary);
      |                            ~^                    ~~~~~~~~~
      |                             |                     |
      |                             float *               double

所以不能简单忽视各类警告