구조체에서 인쇄하려고 할 때 컴파일러 오류

iMPose27

내 임무는 구조체를 사용하여 직원에 대한 정보를 입력하고 급여를 출력하는 것입니다.

끝까지 printf()계산 된 결과를 시도 할 때까지 제대로 실행되는 것 같습니다 . 컴파일러는 나에게 말한다 [Error] request for member '*' in something not a structure or union. (*를 ID, 이름, grossPay, netPay로 대체하십시오.)

질문을 받으면 죄송합니다. 나는 여전히 structs / pointers / etc에 익숙하지 않기 때문에 간단한 실수라고 생각합니다. 그것은 나에게 튀어 나오는 것이 아닙니다. 이전 질문 중 일부를 살펴 보았지만 대부분은 상황에 따라 다릅니다.

// Matt Posey - PP #20

#include <stdio.h>

struct employee
{
    char ID[6];
    char name[20];
    float hours;
    float payRate;
    float grossPay;
    float netPay;   
};

int main()
{
    int j, i = 0;
    int employees;

    printf("This program computes pay.\n");

    printf("\nNumber of employees: ");
    scanf("%d", &employees);
    fseek(stdin,0,SEEK_END);

// Get data
    for (i = 0; i < employees; i++)
    {
        j = i; 
        struct employee j;

        printf("\nFor employee %d:", i+1);

        printf("\nID: ");
        gets(j.ID);
        fseek(stdin,0,SEEK_END);
        printf("Name: ");
        gets(j.name);
        fseek(stdin,0,SEEK_END);
        printf("Pay rate: ");
        scanf("%f", &j.payRate);
        fseek(stdin,0,SEEK_END);
        printf("Hours worked: ");
        scanf("%f", &j.hours);
        fseek(stdin,0,SEEK_END);

        j.grossPay = j.hours * j.payRate;

        if (j.hours > 40)
        {
            printf("Overtime!");
            float OT = (j.hours - 40) * (j.payRate * 0.5);
            j.grossPay += OT;
        }

        j.netPay = j.grossPay * 0.75;   

    }

// Output data

    printf("\n\nID     | Name                 | Gross Pay | Net Pay");
    printf("\n------ | -------------------- | --------- | -------");    

    for (i = 0; i < employees; i++)
    {   
        j = i;

        printf("\n%c | %c | $%7.2f | $%7.2f", j.ID, j.name, j.grossPay, j.netPay);
    }

    return 0;
}
마혼 리 모리안 쿠머

질문 코드와 관련된 몇 가지 문제 ...

1)

// Get data
for (i = 0; i < employees; i++)
{
    j = i;
    struct employee j;

변수 j는 선언 된 범위 (예 : 중괄호) 내에서만 볼 수 있습니다. `main () '의 범위로 이동하여이 문제를 해결합니다.

int main()
{
    int j, i = 0;
    int employees;
    struct employee j;

물론 이것은 이미`int j '가 정의되어 있다는 또 다른 문제를 일으 킵니다. 그것을 제거하십시오 :

int main()
{
    int i = 0;
    int employees;
    struct employee j;

2) 다음으로 j모든 직원을 수용 할 수있는 어레이가되어야합니다. 안타깝게도 (컴파일시) 사용자에게 필요한 직원 수를 알 수 없습니다. 따라서 나중에 메모리를 할당하는 포인터를 만드십시오.

int main()
{
    int i = 0;
    int employees;
    struct employee *j=NULL;

사용자가 직원 수를 표시 한 다음 어레이에 충분한 메모리를 할당하도록합니다.

 printf("\nNumber of employees: ");
 scanf("%d", &employees);
 fseek(stdin,0,SEEK_END);

 j = malloc(employees * sizeof(*j));
 if(NULL == j)
     {
     fprintf(stdout, "malloc() failed.\n");
     goto CLEANUP;   
     }

그런 다음 return 문 바로 앞에 'goto label'을 추가합니다.

CLEANUP:


    return 0;
}

malloc()함수 를 사용하려면 다른 헤더를 포함해야합니다.

#include <stdio.h>
#include <stdlib.h>  /* Added for 'malloc()' */

3) 이제 그 j=i;물건을 제거하십시오 .

// Get data
    for (i = 0; i < employees; i++)
    {
       printf("\nFor employee %d:", i+1);

4) 이제 모든 곳 j이 참조되고 배열처럼 참조됩니다.

    printf("\nID: ");
    gets(j[i].ID);
    fseek(stdin,0,SEEK_END);
    printf("Name: ");
    gets(j[i].name);
    fseek(stdin,0,SEEK_END);
    printf("Pay rate: ");
    scanf("%f", &j[i].payRate);
    fseek(stdin,0,SEEK_END);
    printf("Hours worked: ");
    scanf("%f", &j[i].hours);
    fseek(stdin,0,SEEK_END);

    j[i].grossPay = j[i].hours * j[i].payRate;

    if (j[i].hours > 40)
    {
        printf("Overtime!");
        float OT = (j[i].hours - 40) * (j[i].payRate * 0.5);
        j[i].grossPay += OT;
    }

    j[i].netPay = j[i].grossPay * 0.75;

그리고 여기에서도 :

    printf("\n%c | %c | $%7.2f | $%7.2f", j[i].ID, j[i].name, j[i].grossPay, j[i].netPay);

5)을 제거하기 j = i;main():

for (i = 0; i < employees; i++)
{
    printf("\n%c | %c | $%7.2f | $%7.2f", j[i].ID, j[i].name, j[i].grossPay, j[i].netPay);
}

6) printf () 형식 문자열을 수정합니다. 문자가 아닌 문자열을 인쇄해야합니다.

    printf("\n%s | %s | $%7.2f | $%7.2f", j[i].ID, j[i].name, j[i].grossPay, j[i].netPay);

이제 코드가 작동합니다.

그러나 여전히 위험한 코드가 있습니다. 예를 들어 fgets ()를 사용해야합니다 (gets () 대신) [chris & McLovin에 의해 표시됨] 등.

    printf("\nID: ");
    fgets(j[i].ID, sizeof(j[i].ID), stdin);
    fseek(stdin,0,SEEK_END);
    printf("Name: ");
    fgets(j[i].name, sizeof(j[i].name), stdin);

그리고 끝 줄 바꿈이 있으면 보고서가 더 깨끗해질 것입니다.

    printf("\n");

CLEANUP:

    return 0;
}

그리고 Ed Heal이 지적했듯이이 라인은 필요하지 않습니다.

fseek(stdin,0,SEEK_END);

스포일러

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

구조체를 인쇄하려고 할 때 분할 오류

분류에서Dev

Android Studio에서 버튼을 설치하려고 할 때 컴파일러 오류

분류에서Dev

벡터의 내용을 인쇄하려고 할 때 컴파일러 오류가 발생합니다.

분류에서Dev

CreateObject ( "webservice", ...)를 사용할 때 "Java 컴파일러에서보고 된 오류"

분류에서Dev

private var를 선언 할 때 Swift 구조체 컴파일러 오류

분류에서Dev

아래 프로그램을 실행하려고 할 때 컴파일러 오류

분류에서Dev

.hla 파일을 컴파일하려고 할 때 변환 오류

분류에서Dev

오류가 자바 컴파일러에서 출력 할 때 실패 만드는 방법 파이프 라인

분류에서Dev

clang-tidy 보고서 오류 알 수없는 인수가 다른 컴파일러 옵션을 포함 할 때

분류에서Dev

Haskell GHCI 컴파일러 : 간단한 함수를 정의하고 선언 할 때 repl의 구문 분석 오류

분류에서Dev

함수 내부에 첫 번째 값을 인쇄 한 직후에 인쇄하려고 할 때 C 분할 오류

분류에서Dev

qjournalctl을 설치하려고 할 때 컴파일 오류

분류에서Dev

make를 실행하려고 할 때 컴파일 오류

분류에서Dev

vector <ostringstream>을 사용하려고 할 때 컴파일 오류

분류에서Dev

vector <ostringstream>을 사용하려고 할 때 컴파일 오류

분류에서Dev

std :: result_of를 사용하려고 할 때 컴파일 오류

분류에서Dev

C ++에서 std :: map을 정의하고 사용할 때 컴파일 오류

분류에서Dev

라이브러리의 프로 시저에 배열 / 포인터를 전달할 때 컴파일 오류

분류에서Dev

파일에 저장하려고 할 때 Nodejs Ferros 버퍼 오류

분류에서Dev

EclipseXul 플러그인을 설치하려고 할 때 오류 (GTK에서?)

분류에서Dev

Android에서 릴리스하기 위해 컴파일하려고 할 때 왜 오류가 발생합니까?

분류에서Dev

PHP로 배열에 인덱스 0을 인쇄하려고 할 때 개체 오류

분류에서Dev

C ++에서 구조체를 반환 할 때 여러 오류가 발생하는 이유는 무엇입니까?

분류에서Dev

ansible에서 루프를 사용할 때 특정 파일을 교체하려고 할 때 오류 발생

분류에서Dev

random_device, mt19937 및 uniform_int_distribution을 사용하려고 할 때 많은 컴파일러 오류

분류에서Dev

Conspy : 최신 버전을 컴파일하려고 할 때 "정의되지 않은 참조"오류

분류에서Dev

AngularJS에서 PDF 파일을 인쇄 할 때 오류 발생

분류에서Dev

문자열을 인쇄하려고 할 때 세그 오류

분류에서Dev

C에서 함수 포인터를 호출 할 때 컴파일 오류

Related 관련 기사

  1. 1

    구조체를 인쇄하려고 할 때 분할 오류

  2. 2

    Android Studio에서 버튼을 설치하려고 할 때 컴파일러 오류

  3. 3

    벡터의 내용을 인쇄하려고 할 때 컴파일러 오류가 발생합니다.

  4. 4

    CreateObject ( "webservice", ...)를 사용할 때 "Java 컴파일러에서보고 된 오류"

  5. 5

    private var를 선언 할 때 Swift 구조체 컴파일러 오류

  6. 6

    아래 프로그램을 실행하려고 할 때 컴파일러 오류

  7. 7

    .hla 파일을 컴파일하려고 할 때 변환 오류

  8. 8

    오류가 자바 컴파일러에서 출력 할 때 실패 만드는 방법 파이프 라인

  9. 9

    clang-tidy 보고서 오류 알 수없는 인수가 다른 컴파일러 옵션을 포함 할 때

  10. 10

    Haskell GHCI 컴파일러 : 간단한 함수를 정의하고 선언 할 때 repl의 구문 분석 오류

  11. 11

    함수 내부에 첫 번째 값을 인쇄 한 직후에 인쇄하려고 할 때 C 분할 오류

  12. 12

    qjournalctl을 설치하려고 할 때 컴파일 오류

  13. 13

    make를 실행하려고 할 때 컴파일 오류

  14. 14

    vector <ostringstream>을 사용하려고 할 때 컴파일 오류

  15. 15

    vector <ostringstream>을 사용하려고 할 때 컴파일 오류

  16. 16

    std :: result_of를 사용하려고 할 때 컴파일 오류

  17. 17

    C ++에서 std :: map을 정의하고 사용할 때 컴파일 오류

  18. 18

    라이브러리의 프로 시저에 배열 / 포인터를 전달할 때 컴파일 오류

  19. 19

    파일에 저장하려고 할 때 Nodejs Ferros 버퍼 오류

  20. 20

    EclipseXul 플러그인을 설치하려고 할 때 오류 (GTK에서?)

  21. 21

    Android에서 릴리스하기 위해 컴파일하려고 할 때 왜 오류가 발생합니까?

  22. 22

    PHP로 배열에 인덱스 0을 인쇄하려고 할 때 개체 오류

  23. 23

    C ++에서 구조체를 반환 할 때 여러 오류가 발생하는 이유는 무엇입니까?

  24. 24

    ansible에서 루프를 사용할 때 특정 파일을 교체하려고 할 때 오류 발생

  25. 25

    random_device, mt19937 및 uniform_int_distribution을 사용하려고 할 때 많은 컴파일러 오류

  26. 26

    Conspy : 최신 버전을 컴파일하려고 할 때 "정의되지 않은 참조"오류

  27. 27

    AngularJS에서 PDF 파일을 인쇄 할 때 오류 발생

  28. 28

    문자열을 인쇄하려고 할 때 세그 오류

  29. 29

    C에서 함수 포인터를 호출 할 때 컴파일 오류

뜨겁다태그

보관