2013-05-08 2 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.

Кроме того, может ли кто-нибудь помочь мне преобразовать это значение чтения в ASCII?

+1

, когда есть вы должны показать это в вопросе - компилятор пытается помочь. – sje397

+5

'sizeof (msize)! = 4096' и' sizeof (struct memory)! = 4096' и 'void read (struct memory * m)' // читать указатель arg – BLUEPIXY

ответ

3

Вам необходимо пройти scanf адрес, чтобы написать так нужно изменить

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

в

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

Вы должны также рассмотреть возможность передачи указателя на m к read, а не передавая эту огромную-структуру по значению

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

(I) п факт, ваш read(&m) вызов в main, кажется, уже, предположив это обновление)

+0

Я изменил, как указано выше Затем и его бросание ошибки в пределах void read() как множественное определение чтения и первое определение здесь. – user2306769

+1

Вам нужно либо переместить 'read' над' main', либо предоставить переднее объявление над 'main'. Подробнее см. Ответ от 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(). – 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. return type of main can not be void 2. читать нужно было поставить перед основным 3.as @simonic уже сказал use scanf («% d», & m-> a [i]) он скомпилирует штраф без ошибок –

+0

Большое спасибо!!! не могли бы вы дать мне некоторые идеи для преобразования этих значений в ASCII ?? – user2306769

Смежные вопросы