我是C的新手,我正在尝试从我的书中运行一个程序,该程序显示了我们如何处理结构数组。
#include<stdio.h>
#include<conio.h>
struct employee
{
int empno;
char name[30];
int basic;
int hra;
};
void main()
{
struct employee e[50];
int i, j, n;
int net[50];
float avg;
printf("Enter the number of employees: ");
scanf("%d", &n);
printf("Enter Emp. No. \tName:\tBasic\tHRA of each employee in the order.\n");
for(i=0; i<n; i++)
{
scanf("%d", &e[i].empno);
gets(e[i].name);
scanf("%d", &e[i].basic);
scanf("%d", &e[i].hra);
net[i]=e[i].basic + e[i].hra ;
avg = avg + net[i];
}
avg = avg/n;
printf("Emp. No \t Name-Netpay: ");
for(i=0; i<n; i++)
{
if(net[i]>avg)
{
printf("\t",e[i].empno);
printf("\t", e[i].name);
printf("\t", net[i]);
} } }
我还有其他模块可以继续计算平均值,并打印薪水+小时数高于平均值的那些元素。但是,上面粘贴的代码无法按预期工作。
现在,如果我输入员工人数-假设为1,则只允许我输入empno和名称并退出循环。我期望它在整个循环中至少完成一个循环,值为1。
任何对此的建议将不胜感激,如果在任何地方搞砸,我深表歉意。谢谢。
最佳答案
您需要在使用gets之前从输入中刷新行(不建议使用btw):
#include <stdio.h>
struct employee
{
int empno;
char name[30];
int basic;
int hra;
};
int main()
{
struct employee e[50];
int i, j, n;
int net[50];
float avg;
printf("Enter the number of employees: ");
scanf("%d", &n);
printf("Enter Emp. No. \tName:\tBasic\tHRA of each employee in the order.\n");
for(i=0; i<n; i++)
{
scanf("%d", &e[i].empno);
char c;
while ((c = getchar()) != EOF && c != '\n');
gets(e[i].name);
scanf("%d", &e[i].basic);
scanf("%d", &e[i].hra);
net[i]=e[i].basic + e[i].hra ;
avg = avg + net[i];
}
return 0;
}
这是因为
scanf
不会读取行尾(\n
),但是gets
会立即返回。 scanf
将改为读取名称。基本上,那是一团糟:)。关于c - C语言中的结构数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19301209/