marionette 0 Report post Posted February 28, 2005 #define MAX 20struct subject{char nama [40];char gred;int markah;};struct subject math[MAX];void main(){bacafail (subject)/*kiramarkah (math, gred)cetakmarkah (math);*/void bacafail (struct subject math(MAX));{ File *fail;int i;fail = fopen ("pelajar.dat","r");for (i=0; i<MAX; i++)fscanf(fail, "%s" , p.nama));fgets(p.markah, fail);printf("%s %d", p.nama, p.markah)}fclose (fail);}output:mohdkamalbin abu80salimjohari90->tapi dalam fail "pelajar.dat" dia punya bentuk camnie:mohd kamal bin abu 80salim johari 90jadi camner saya nak buat apa yang sebijik dalam fail "pelajar.dat" sama ngan saya punya output.Atau ada silap saya kat atucara di atas???mintak tolong semak....aturcara ini akan membaca fail "pelajar.dat" kemudian ia akan mempaparkan isi kadungan fail "pelajar.dat" kemudian ia berupaya mengira berapa peratus yg dapat A,B,C dan D mengikut range yg akan ditentukan nnt.Skrng saya punya output tak jadi,camner saya boleh selesaikan masalah saya nie??? Quote Share this post Link to post Share on other sites
encik pot pet 0 Report post Posted March 1, 2005 (edited) fgets(p.markah, fail); kalau tukar jadi fscanf(fail, "%d" , p.markah)); jadik mcm mana?aku takde compiler nak experiment.. sorryedit:http://www.geocities.com/r_etarded/testing.zipada laa sample code utk simpan data dalam binary file..siap ada gui tu...kohokhkohok Edited March 1, 2005 by zeph Quote Share this post Link to post Share on other sites
marionette 0 Report post Posted March 2, 2005 tq zeph.dah ade kemajuan skit.aku ubah gini:fscanf(fail, "%s %d", p.nama, &p.markah);fprintf("%s %d", p.nama, p.markah);output die:mohd 0kamal 0bin 0abu 80salim 0johari 90macamana nak buat gini:mohd kamal bin abu 80salim johari 90 Quote Share this post Link to post Share on other sites
siti 0 Report post Posted March 2, 2005 kalau hanya mahu menggunakan fungsi fscanf untuk membaca fail,siti cadangkan satu kaedah yang agak 'mudah' dan ringkas...1. Nama <- "", Markah <- 02. ulang selagi masih ada data dalam fail 2.1 fscanf(fail, "%s", szValue ); 2.2 Jika szValue bukan digit, maka Nama <- Nama + szValue, Jika tidak 2.2.1 Markah <- szValue (perlu tukarkan string kepada integer) 2.2.2 keluar dari gelung (pergi ke 3)3. simpan Nama dan Markah ke dalam rekod pelajar 4. kalau masih ada data dalam fail 4.1 Ulang untuk rekod pelajar baru (pergi ke 1)contoh:1. Nama = "", Markah = 02. szValue = "mohd", Name = "mohd" 3. szValue = "kamal", Name = "mohdkamal" 4. szValue = "bin", Name = "mohdkamalbin" 5. szValue = "abu", Name = "mohdkamalbinabu" 6. szValue = "80", Markah = 807. p[0].Nama = "mohdkamalbinabu" p[0].markah = 808. Nama = "", Markah = 09. szValue = "salim", Name = "salim" 10. szValue = "johari", Name = "salimjohari" 11. szValue = "90", Markah = 9012. p[1].Nama = "salimjohari" p[1].markah = 9013. Nama = "", Markah = 014. dan seterusnya...untuk memisahkan "mohdkamalbinabu" kepada "mohd kamal bin abu"marionette perlulah menggunakan kebijaksanaan sendiri dan siti memberi jaminan tidak susah untuk menulisnya.p/s: untuk mencantum string boleh guna strcat dan untuk menukar string kepada integer guna atoi. untuk memastikan szValue adalah digit, tulis fungsi sendiri... Quote Share this post Link to post Share on other sites
marionette 0 Report post Posted March 3, 2005 szValue? saya baru belajar2 nak guna C. boleh cerita lebih detail tak siti camner fungsi szValue. Setakat nie saya blom jumpa mengenai szValue. yang saya tahu struct, array, pointer, gelung2 nie. belajar sendiri2 n buat rujukan sendiri kat internet.tak pun tanya kat orang2 kat sini. Takpe saya try test cuba buat.nnt tolong cek kan yer... Quote Share this post Link to post Share on other sites
marionette 0 Report post Posted March 3, 2005 nie jer ilmu yang saya ada klu berpandu guide yg siti bagi...tak tau btol ke tidak.int i;szValue (nama, markah);for (i=0; i<MAX; i++{ fscanf (fail, "%s", szValue); if { nama <- nama + szValue; p.nama = szValue; } else { markah <-s zValue; p.markah = szValue; }}boleh jalan ker nier??? Quote Share this post Link to post Share on other sites
siti 0 Report post Posted March 3, 2005 (edited) alamak, apa yang siti berikan adalah algoritma dan jangan menterjemahkannyakepada kod secara bulat-bulat!!!! char szValue[MAX_STR_LEN]; char szName[MAX_STR_LEN]; int iMarkah; // open and initiate file.... for ( int i=0; i<MAX_RECORD; i++ ) { strcpy ( szName, "" ); iMarkah = 0; while ( TRUE ) { if ( feof ( hFail ) ) // sudah habis baca fail break; fscanf ( hFail, "%s", szValue ); if ( !IsDigit ( szValue ) ) strcat ( szName, szValue ); else { iMarkah = atoi ( szValue ); strcpy ( p[i].Nama, szName ); p[i].Markah = iMarkah; break; // continue to the next student } // else } // while if ( feof ( hFail ) ) // sudah habis baca fail break; } // for // close file.... fungsi IsDigit kena tulis sendiri!!!! Edited March 3, 2005 by siti Quote Share this post Link to post Share on other sites
marionette 0 Report post Posted March 4, 2005 buah cempedak dluar pagar,ambil galah tolong jolokan,saya budak baru blajar,klu salah tolong tunjuk. siti nak tanya sikit....apa maksud "h" kat depan fail tu??? fscanf ( hFail, "%s", szValue );sbb sebelum nie saya buat: fscanf (fail, "%s", szValue ); Quote Share this post Link to post Share on other sites
siti 0 Report post Posted March 4, 2005 penggunaan huruf 'h' itu dinamakan hungarian notation (direka oleh Charles Simonyi, microsoft). biasanya kalau kita menulis kod untuk projek yang besar dan melibatkan ramai programmer, penggunaan hungarian notation digalakkan (dan sesetengah syarikat mewajibkannya) supaya kod menjadi lebih senang difahami dan seragam.sebagai contoh,'i' - integer'h' - handle'sz' - null termiated stringjika kita menulis kod seperti ini,// pengistiharanint iMarkah; // berjenis integer!// banyak lagi kod di sini// beribu-ribu lemon banyaknya// dan akhirnyascanf ( "%f", &iMarkah ); // membaca nilai float!sudah tentu ada yang tidak kena dengan baris "scanf ( "%f", &iMarkah)" kerana parameter pertama untuk membaca pembolehubah jenis float tetapi parameter kedua adalah berjenis penunjuk kepada integer (penggunaan 'i' untuk 'iMarkah').tetapi standard hungarian notation ini tidak sama untuk setiap syarikat yang berlainan...http://www4.ncsu.edu:8030/~moriedl/projects/hungarian/http://msdn.microsoft.com/library/default..../HungaNotat.asp Quote Share this post Link to post Share on other sites
Ancient One 3 Report post Posted March 13, 2005 Awak bleh guna fungsi fgets untuk dapatkan satu baris data dari fail, then scan baris ni untuk dapatkan data. Kalau nak guna fungsi C, bleh gunakan sscanf. Untuk format data awak, bleh gunakan format specifier "%[^0-9]%d", di mana %[^0-9] untuk dapatkan data selain daripada nombor (nama orang maner ader nombor ye tak), then %d untuk dapatkan markah. Of course ni contoh ni limited jer. Awak bleh bacer mengenai scanf nyer format specifiers untuk dapatkan hasil yang lebih memuaskan, e.g untuk pisahkan first name dan last name. Contoh kod : #include <stdio.h> #define MAX_INPUT 20 #define MAX_CHARS_IN_LINE 100 #define MAX_NAME_LENGTH 40 char line[MAX_CHARS_IN_LINE], name[MAX_NAME_LENGTH]; int mark; void dumpinfo() { FILE *file; int i; file = fopen ("pelajar.dat","r"); for (i=0; i<MAX_INPUT; i++) { if (fgets(line, sizeof(line), file) == NULL) break; sscanf(line, "%[^0-9]%d", name, &mark); printf("%s%d\n", name, mark); } fclose (file); } void main() { dumpinfo(); } Quote Share this post Link to post Share on other sites
marionette 0 Report post Posted March 14, 2005 (edited) terima kasih kepada yg sudi membantu... minggu lepas saya ada tanya member saya yang amik subject C. dia ada emailkan saya atucara nie: ko buata satu fail "pelajar.dat" pastu ko isi data nie:farid bin abu 60 Bkassim bin salleh 80 Afarid bin ismail 40 Dblaaa.........blaaaa dan bla....save kat ko nyer c compiler.buat aturcara kat bawah. mesti ko faham nyer....#define MAK 20struct kursus{ char nama[20]; int markah; char gred;};struct kursus cbds[MAK];void bacadata(struct kursus p[]);void kiragred(struct kursus p[]);void kiraperatus(int v, int w, int x, int y, int z)void bacadata (struct kursus p[]){ FILE *fail; int i; fail = fopen("pelajar.dat","r") for (i=0; i<MAK; i++ { fgets(p.nama, 20, fail); fscanf(fail, "%d", &(p.markah)); fscanf(fail, "%c", &(p.gred)); } fclose (fail);}void kiragred (struct kursus k[]){ int i,a,b,c,d,e; a=b=c=d=e=0; for (i=0; i<MAK; i++) { if (p.gred=='A') { a++; printf("%s mendapat A\n",p.nama); } else if (p.gred=='B') { b++; printf ("%s mendapat B\n",p.nama); } else if (p.gred=='C') { c++; printf ("%s mendapat C\n",p.nama); } else if (p.gred=='D') { d++; printf ("%s mendapat D\n",p.nama); ) else if (p.gred=='E') { e++; printf (" %s mendapat E\n", p.nama); } } printf("Bilangan pelajar yang mendapat gred A ialah seramai :%d\n",a) printf("Bilangan pelajar yang mendapat gred B ialah seramai :%d\n", printf("Bilangan pelajar yang mendapat gred C ialah seramai :%d\n",c) printf("Bilangan pelajar yang mendapat gred D ialah seramai :%d\n",d) printf("Bilangan pelajar yang mendapat gred E ialah seramai :%d\n",e)}void kiraperatus(int v, int w, int x, int y, int z){printf("Peratus pelajar yang mendapat gred A ialah : %.1f % peratus\n", (float)v* 100/MAK);printf("Peratus pelajar yang mendapat gred B ialah : %.1f % peratus\n", (float)w* 100/MAK);printf("Peratus pelajar yang mendapat gred C ialah : %.1f % peratus\n", (float)x* 100/MAK);printf("Peratus pelajar yang mendapat gred D ialah : %.1f % peratus\n", (float)y* 100/MAK);printf("Peratus pelajar yang mendapat gred E ialah : %.1f % peratus\n", (float)z* 100/MAK);}tapi bila saya run aturcara kat atas.dia cakap declaraion syntax error.kat maner silapnya? nak tanya member nie balik dia tengah exam...malas nak kacau plak.. Edited March 14, 2005 by marionette Quote Share this post Link to post Share on other sites
encik pot pet 0 Report post Posted March 14, 2005 takde function main() utk call function bacadata() awak tujgn secara membuta tuli compile... kena fahamkan structure dia dulu... Quote Share this post Link to post Share on other sites
publicENEMY 0 Report post Posted March 14, 2005 #include <stdio.h>#define MAK 20struct kursus{ char nama[20]; int markah; char gred;};struct kursus cbds[MAK];void bacadata(struct kursus p[]);void kiragred(struct kursus p[]);void kiraperatus(int v, int w, int x, int y, int z);void bacadata (struct kursus p[]){ FILE *fail; int i; fail = fopen("pelajar.dat","r"); for (i=0; i<MAK; i++) { fgets(p.nama, 20, fail); fscanf(fail, "%d", &(p.markah)); fscanf(fail, "%c", &(p.gred)); } fclose (fail);}void kiragred (struct kursus p[]){ int i,a,b,c,d,e; a=b=c=d=e=0; for (i=0; i<MAK; i++) { if (p.gred=='A') { a++; printf("%s mendapat A\n",p.nama); } else if (p.gred=='B') { b++; printf ("%s mendapat B\n",p.nama); } else if (p.gred=='C') { c++; printf ("%s mendapat C\n",p.nama); } else if (p.gred=='D') { d++; printf ("%s mendapat D\n",p.nama); } else if (p.gred=='E') { e++; printf (" %s mendapat E\n", p.nama); } } printf("Bilangan pelajar yang mendapat gred A ialah seramai :%d\n",a); printf("Bilangan pelajar yang mendapat gred B ialah seramai :%d\n",; printf("Bilangan pelajar yang mendapat gred C ialah seramai :%d\n",c); printf("Bilangan pelajar yang mendapat gred D ialah seramai :%d\n",d); printf("Bilangan pelajar yang mendapat gred E ialah seramai :%d\n",e);}void kiraperatus(int v, int w, int x, int y, int z){ printf("Peratus pelajar yang mendapat gred A ialah : %.1f % peratus\n", (float)v* 100/MAK); printf("Peratus pelajar yang mendapat gred B ialah : %.1f % peratus\n", (float)w* 100/MAK); printf("Peratus pelajar yang mendapat gred C ialah : %.1f % peratus\n", (float)x* 100/MAK); printf("Peratus pelajar yang mendapat gred D ialah : %.1f % peratus\n", (float)y* 100/MAK); printf("Peratus pelajar yang mendapat gred E ialah : %.1f % peratus\n", (float)z* 100/MAK);}int main( void ){ return true;}←ada banyak syntax error.dah modify dah code sampai boleh run. tinggal isikan mainnya sahaja. ok;) Quote Share this post Link to post Share on other sites