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 と名前の入力のみが許可され、ループを終了します。値 1 のループを少なくとも 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 に答える