0

我是 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 和 name 并退出循环。我希望它通过值为 1 的循环完成至少一个循环。

对此的任何建议将不胜感激,如果我在任何地方搞砸了,我深表歉意。谢谢。

4

1 回答 1

1

您需要在使用 gets 之前从输入中刷新该行(顺便说一句已弃用):

#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将改为读取名称。基本上,那是一团糟:)。

于 2013-10-10T16:37:22.583 回答