2016-11-04 2 views
-1

제 질문은 일, 월, 년 세 멤버가 포함 된 구조를 만드는 것입니다. 우리는 키보드를 통해 10 명의 직원이 합류하는 연도를 제공해야합니다. 제공된 연도는 증가하는 순서로 사용자에게 다시 표시되어야합니다.구조의 배열을 통해 정렬 된 순서로 표시하려면

그래서 구조체 배열을 사용하고 scanf() 함수를 사용하여 값을 제공하고 나중 버블 정렬을 사용하여 제공된 연도를 정렬했습니다. 하지만 그것은 scanf()에 문제가있는 것 같습니다. 내 코드에서 런타임 오류가 발생했습니다. 내 코드에서 실수 란 무엇입니까? 도와주세요.

다음은 내 코드

#include<stdio.h> 
void swap(int *, int *); 
int main() 
{ 
int i, j; 

typedef struct date 
{ 
    char day : 5; 

    char month : 4; 

    int year : 12; 

}D; 

D arr[10]; 

printf("Enter year of joining of 10 employees\n"); 

for (i = 0; i < 10; i++) 
    scanf_s("%d", arr[i].year); 

for (i = 0; i < 10; i++) 
{ 
    for (j = i + 1; j < 10; j++) 
    { 
     if (arr[i].year > arr[j].year) 
      swap(arr[i].year, arr[j].year); 

    } 

} 

printf("Value of employees joining year in sorted order is : \n"); 

for (i = 0; i < 10; i++) 
    printf("%d", arr[i].year); 

return 0; 

} 

void swap(int *x, int *y) 
{ 
    int temp; 

    temp = *x; 
    *x = *y; 
    *y = temp; 

    } 
+0

'scanf_s ("% d", arr [i] -> 년)' –

+0

scanf()는 포인터가 필요하므로 & arr [i]. 추신 : scanf_s()와 'friends'는 사용하지 마십시오. –

답변

0

두 가지 주요 문제는 비트 필드를 사용하여, 그리고 함수 포인터를 전달하는 것입니다.

bitfields를 사용하는 점이 있습니다. 구조체의 크기는 비트 필드이든 단순한 정수형이든 관계없이 8입니다.

그러나 실제 문제가 발생하는 경우, scanf_sswap 당신이 비트 필드에 포인터를 전달하기로하고, 컴파일러 (MSVC)는 그렇게하지 않습니다.

따라서 비트 필드 사양을 제거하고 호출에 주소 연산자를 추가하십시오.

#include<stdio.h> 

typedef struct date 
{ 
    char day;          // remove bitfield spcs 
    char month; 
    int year; 
} D; 

void swap(int *, int *); 

int main(void) 
    { 
    int i, j; 
    D arr[10]; 

    printf("Enter year of joining of 10 employees\n"); 
    for (i = 0; i < 10; i++) 
     scanf_s("%d", &arr[i].year);    // add the & operator 

    for (i = 0; i < 10; i++) 
    { 
     for (j = i + 1; j < 10; j++) 
     { 
      if (arr[i].year > arr[j].year) 
       swap(&arr[i].year, &arr[j].year); // add & operators 
     } 
    } 

    printf("Value of employees joining year in sorted order is : \n"); 
    for (i = 0; i < 10; i++) 
     printf("%d", arr[i].year); 
    return 0; 
} 

void swap(int *x, int *y) 
{ 
    int temp; 
    temp = *x; 
    *x = *y; 
    *y = temp; 
} 

그러나 나는 이것이 여전히 부족하다고 말할 것입니다. 왜 일년을 바꿔야 하죠? 나는 당신이 날과 달도 교환해야한다고 제안한다 : 전체 struct.

관련 문제