Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: baran123 - 19 Mayıs 2016, 21:45:44

Başlık: Basit bir structure sorusu
Gönderen: baran123 - 19 Mayıs 2016, 21:45:44
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)

Başlık: Ynt: Basit bir structure sorusu
Gönderen: quarko - 19 Mayıs 2016, 22:15:49
ogr[ogrNo]._ad = ogrAd;

Bu şekilde char türünden bir diziye atama yapamazsın. "strcpy" ile veya "memcpy + null" ile yapmalısın.
Başlık: Ynt: Basit bir structure sorusu
Gönderen: baran123 - 19 Mayıs 2016, 22:39:40
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;
}
Başlık: Ynt: Basit bir structure sorusu
Gönderen: quarko - 19 Mayıs 2016, 22:46:45
Rica ederim, kolay gelsin :)
Başlık: Ynt: Basit bir structure sorusu
Gönderen: baran123 - 19 Mayıs 2016, 23:30:10
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);
Başlık: Ynt: Basit bir structure sorusu
Gönderen: baran123 - 20 Mayıs 2016, 01:54:29
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);