2013-05-08 3 views
-1
#include<stdio.h> 
#define msize 4096 

struct memory 
{ 
    int a[msize]; 
}; 

void main() 
{ 
    struct memory m; 
    m.a[0]=250; // temperature value of 25,0 
    m.a[4]=01; // heater status OFF 
    m.a[8]=240; // temperature value of 24,0 
    m.a[12]=00; // heater status ON 
    m.a[16]=220; // temperature value of 22,0 
    m.a[20]=00; // heater status ON 
    read(&m); 

} 

void read(struct memory m) 
{ 
    int i; 
    for(i=0;i<sizeof(msize);i++) 
    { 
     scanf("%d", m.a[i]); 
    } 
} 

내 코드는 구조체의 개체 인 크기 4096 바이트의 구조체를 만든 다음 값을 i에 할당합니다.C에서 구조체의 값을 읽는 방법

컴파일시 컴파일러에서 read 함수에 "first defined here"오류가 발생합니다.

또한이 누군가를이 읽기 값을 ASCII로 변환하는 데 도움을 줄 수 있습니까?

+1

을있을 때 오류 - 컴파일러가 질문에 표시해야합니다. – sje397

+5

'sizeof (msize)! = 4096' 그리고'sizeof (struct memory)! = 4096' 그리고 void read (struct memory * m)'// arg 포인터를 읽는다 – BLUEPIXY

답변

3

당신은 너무

scanf("%d", m.a[i]); 

당신은 readm에 대한 포인터를 전달 고려도해야

scanf("%d", &m.a[i]); 
//  ^

오히려이 거대한 구조체를 전달하는 대신 변경해야하는 쓰기 scanf에게 주소를 전달해야 값

void read(struct memory* m) 
{ 
    int i; 
    for(i=0;i<msize;i++) 
    { 
     scanf("%d", &m->a[i]); 
    } 
} 

(I에 의해 n 개의 사실은 mainread(&m) 호출이 업데이트를 가정하여 이미에 나타납니다)

+0

위와 같이 바꿨다. read()는 read의 다중 정의로 정의되고 여기서 처음 정의됩니다. – user2306769

+1

'main' 위에'read'를 이동하거나'main' 위에 forward 선언문을 제공해야합니다. 자세한 내용은 sje397의 대답을 참조하십시오. – simonc

1

@simonc는 말 이외에, 당신은 또한 정상 기능을 선언해야합니다.

#include<stdio.h> 
#define msize 4096 

struct memory 
{ 
int a[msize]; 
}; 

void read(struct memory m); 

void main() 
{ 
//... 
+0

당신이 말했듯이 나는 또한 다중 정의 된 읽기와 처음 void read function()에서 정의 된 오류를 던지면서 변경했다. – user2306769

+0

많은 도움이되는 오류의 정확한 텍스트를 붙여 넣는 경우. 함수 이름을 변경해보십시오.'read'는 일반적입니다. – sje397

0
#include<stdio.h> 
#define msize 4096 
struct memory 
{ 
int a[msize]; 
}; 

void read(struct memory *m) 
{ 
int i; 
for(i=0;i<sizeof(msize);i++) 
{ 
    scanf("%d",&m->a[i]); 
} 
} 

int main() 
{ 
struct memory m; 
m.a[0]=250; // temperature value of 25,0 
m.a[4]=01; // heater status OFF 
m.a[8]=240; // temperature value of 24,0 
m.a[12]=00; // heater status ON 
m.a[16]=220; // temperature value of 22,0 
m.a[20]=00; // heater status ON 
read(&m); 
return 0; 
} 
+1

1. 주된 캔트의 리턴 타입은 무효가되어야한다. 2. 읽기는 메인 3.as 앞에 놓여 있어야한다. @simonic은 이미 scanf ("% d", & m -> a [i])를 사용한다고 말하고 에러없이 잘 컴파일한다. –

+0

대단히 감사합니다 !!! 이 값을 ASCII로 변환 할 수있는 아이디어를 주시겠습니까 ?? – user2306769