今天时间太晚了根本没时间仔细看解决bug了
#include <stdio.h>
struct worker
{
char num[10];
char name[10];
float salary;
};
int main()
{
struct worker w[100], * p = w;
int i, n=0;
float sum = 0;
printf("Please input the number of workers:");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("Please input %th workers information(workernumber: name: salary:)\n", i + 1);
scanf("%s%s%f", p->num, p->name, p->salary);
sum += p->salary;
p++;
}
printf("The average salary is %.2f\n", sum / n);
printf("The information of whose salary low than 2000.0:\n");
p = w;
printf("The number of work\t name\tsalary\n");
for (i = 0; i < n; i++)
{
if (p->salary < 2000.0)
printf("%s\t%s\t%.2f\n", p->num, p->name, p->salary);
p++;
}
while (1);
return 0;
}
第二个
printf
函数那里的%th
改为%dth
(猜测的)第二个
scanf
里p->salary
应该传地址,否则读不进值,然后还产生各种问题我测试时未传地址在VS2022会给出警告,内容如下:(忽略scanf返回值未使用警告)
仔细看就能发现问题
VSCode中使用clangd扩展给出警告,如下:
Shell中使用gcc编译打开所有警告的命令如下:
警告如下:
所以不能简单忽视各类警告