2016-09-29 7 views
0

좋아요, 그래서 이것은 실제로 내가 작업하고있는 코드가 아닙니다. 이것은 정확히 동일한 오류를 생성하는 지나치게 단순화 된 코드 추출입니다. 따라서 단순화 된 코드로 왜 오류가 발생 하는지를 알 수 있다면 실제 코드에 적용 할 수있을 것이라고 생각했습니다. 사전에 도움이나 조언을 주셔서 감사합니다! 모든구조체 변수 초기화 오류

#include <stdio.h> 
int main() 
{ 
    struct fruit 
    { 
     int apples; 
     int oranges; 
     int strawberries; 
    }; 

    int x; 
    int y; 
    int z; 

    x = 1; 
    y = 2; 
    z = 3; 

    struct fruit apples = x; 
    struct fruit oranges = y; 
    struct fruit strawberries = 4; 

    printf("The value is %d or %d", fruit.apples,fruit.strawberries); 

    return 0; 
} 
+1

있습니다 * 너무 * 많은 오류 여기 : 행동의 최선의 과정 인 것 같습니다. d 좋은 책. K & R은 탁월한 IMHO입니다. – Bathsheba

+0

'struct fruit fruit = {x, y, 4}; ' – BLUEPIXY

+0

실제로 "The C Programming Language"책 lolol을 사용하고 있습니다. 그들은 int 값으로 구조체를 초기화했습니다. – rickylance

답변

1

먼저, 당신은 당신이 중 하나를 중괄호로 둘러싸인 초기화를 사용하거나 명시 적으로 각 멤버를 초기화해야, 어쨌든 int 값으로 struct 유형의 변수를 초기화 할 수 없습니다. 말했다

,

struct fruit applies 
struct fruit oranges 
struct fruit strawberries 

는 유형 struct fruit의 변수를 정의하고 멤버에 액세스하는 방법이 아니다. 올바른 방법

struct fruit f; 
f.apples = x; 
f.oranges = y; 
f.strawberries= 4; 

또는 더 정확한 방법

struct fruit f = {x,y,4}; 

또는 심지어 중간 변수를 절단

struct fruit f = {1,2,4};  
+0

@rickylance 코드를 표시하십시오. –

+0

"f의 저장 크기를 알 수 없습니다"라는 오류 메시지가 나타납니다. – rickylance

+0

@rickylance [잘 작동합니다] (https://ideone.com/EeYbNm) –

1

이있다 할 올바른 구문과 같다 :

struct fruit f; 
f.apples = 1; 
f.oranges = 2; 
f.strawberries = 3; 

또는 RECT 초기화 :

struct fruit f = {1, 2, 3}; 

또는 C99에서 위쪽으로, 지정된 이니셜 라이저를 사용하여 :

struct fruit f = { 
    .apples = 1, 
    .oranges = 2, 
    .strawberries = 3, 
}; 
+0

__ 참고 : 멤버 변수 이름은 일러스트레이션 용이며, 이니셜 만 사용하면됩니다 .___ –

1

사용이 :

struct fruit fruit; 

fruit.apples = {x}; 
fruit.oranges = {y}; 
fruit.strawberries = {4}; 

또는

struct fruit fruit = {x, y, 4};