Basit bir structure sorusu

Başlatan baran123, 19 Mayıs 2016, 21:45:44

baran123

Algoritma finaline çalışıyorum.Kafam durdu resmen. :)

Şöyle bir yapı var
typedef struct
{
    char _ad[10];
    int _yas;
    int _not;
}ogrenci;


amaç öğrenci kayıdı yapmak
void ogrKayit(ogrenci * ogr, char ogrAd[], int ogrYas, int ogrNot, int ogrNo)
{
    ogr[ogrNo]._ad = ogrAd;
    ogr[ogrNo]._yas = ogrYas;
    ogr[ogrNo]._not = ogrNot;
    
    ogrNo++;
    
    return;
}


int main() 
{
    ogrenci ogr[10];
    
    char ogrIsim[10];
    int ogrYas;
    int ogrNot;

 cout<< ogrNo + 1 << "Numarali Ogrenci Ismi : ";
cin>>ogrIsim;
cout<< ogrNo + 1 << "Numarali Ogreci Yasi : ";
cin>>ogrYas;
cout<< ogrNo + 1 << "Numarali Ogreci Notu : ";
cin>>ogrNot;
ogrKayit(&ogr, &ogrIsim, ogrYas, ogrNot, ogrNo);


Hata çıktısı şu çözemedim bir türlü
cd 'C:\Users\EKREM\Desktop\AlgoritmaCalısması'
C:\MinGW\msys\1.0\bin\make.exe -f Makefile CONF=Debug
"/C/MinGW/msys/1.0/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make.exe[1]: Entering directory `/c/Users/EKREM/Desktop/AlgoritmaCal�smas�'
"/C/MinGW/msys/1.0/bin/make.exe"  -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/algoritmacal_smas_.exe
make.exe[2]: Entering directory `/c/Users/EKREM/Desktop/AlgoritmaCal�smas�'
mkdir -p build/Debug/MinGW-Windows
rm -f "build/Debug/MinGW-Windows/main.o.d"
g++    -c -g -MMD -MP -MF "build/Debug/MinGW-Windows/main.o.d" -o build/Debug/MinGW-Windows/main.o main.cpp
main.cpp: In function 'void ogrKayit(ogrenci*, char*, int, int, int)':
main.cpp:16:20: error: incompatible types in assignment of 'char*' to 'char [10]'
     ogr[ogrNo]._ad = ogrAd;
                    ^
main.cpp: In function 'int main()':
main.cpp:51:63: error: cannot convert 'ogrenci (*)[10]' to 'ogrenci*' for argument '1' to 'void ogrKayit(ogrenci*, char*, int, int, int)'
                 ogrKayit(&ogr, &ogrIsim, ogrYas, ogrNot, ogrNo); 
                                                               ^
make.exe[2]: *** [build/Debug/MinGW-Windows/main.o] Error 1
make.exe[2]: Leaving directory `/c/Users/EKREM/Desktop/AlgoritmaCal�smas�'
make.exe[1]: *** [.build-conf] Error 2
make.exe[1]: Leaving directory `/c/Users/EKREM/Desktop/AlgoritmaCal�smas�'
make.exe": *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 1s)

quarko

ogr[ogrNo]._ad = ogrAd;


Bu şekilde char türünden bir diziye atama yapamazsın. "strcpy" ile veya "memcpy + null" ile yapmalısın.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

baran123

Ups :)
teşekkürler hocam aşağıdaki gibi düzelttim.
void ogrKayit(ogrenciler ogr[], char *ogrAd, int ogrYas, int ogrNot, int ogrNo)
{
    strcpy(ogr[ogrNo]._ad, ogrAd);
    
    ogr[ogrNo]._yas = ogrYas;
    ogr[ogrNo]._not = ogrNot;
    
    ogrenciNo++;
    
    return;
}

quarko

"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

baran123

Hocam bir sorum daha olacaktı.
Structure dizisini bir fonksiyona verip içerisindeki elemanları değiştirmek istiyorum.
Fonksiyonu kullanırken adresini vererek yapıyordum ama dizi olunca sanırım böyle olmuyor.
Hatam nerede acaba ?
typedef struct {
    char name[10];
    int age;
    int note;
}Student_t;

Student_t students[10];

void StudentRecord(Student_t* student[], char *stName, int stAge, int stNote, int stNo)
{
    strcpy(student[stNo]->name, stName);
    
    student[stNo]->age = stAge;
    student[stNo]->note = stNote;
    
    stListNo++;
    
    return;
}

StudentRecord(&students, stName, stAge, stNote, stListNo);

baran123

Sorunu şu şekilde çözdüm.
void StudentRecord(Student_t *students, char *stName, int stAge, int stNote)
{
    strcpy(students->name, stName);
    students->age = stAge;
    students->note = stNote;
    stListNo++;
    return;
}

// Kullanım
StudentRecord(&students[stListNo], stName, stAge, stNote);