Mirage_Angel 0 Report post Posted April 16, 2007 #include <stdio.h> #include <string.h> #include <stdlib.h> #define XMAX 65 #define YMAX 32 char screen[XMAX][YMAX]; void printScreen(void); void fill(int, int, char); void isi(int, int, char); int main(int argc, char *argv[]) { FILE *in; int x, y, m, n; char a; if (argc!= 5) { fprintf(stderr,"Usage:\n\t%s <65x32 text file> <x> <y> <letter>\n",argv[0]); exit(1); } in = fopen(argv[1],"r"); if (in == NULL) { perror("opening input file"); exit(1); } for (y=0; y<YMAX; y++) { for (x=0; x<XMAX; x++) screen[x][y] = fgetc(in); } if (fclose(in)) { perror("closing input file"); exit(1); } printScreen(); x = atoi(argv[2]); y = atoi(argv[3]); a = argv[4][0]; fill(x,y,a); printScreen(); } void printScreen(void) { int x,y; for (y=0; y<YMAX; y++) for (x=0; x<XMAX; x++) if(screen[x][y]!= EOF) putchar(screen[x][y]); else puts("\n"); } void fill(int x, int y, char a) { if ((screen[x][y] != ' ')) return; screen[x][y] = a; fill(x,y+1,a); fill(x,y-1,a); fill(x+1,y,a); fill(x-1,y,a); }Code kat atas ni fungsi dia macam paint bucket dalam paint. Problem dia sekarang macam mana saya nak buat kita leh print whole string dalam argv[4]. Kalau yang kat atas tu argv[4][0] akan print first character untuk string dalam argv[4]. Macam mana nk buat bg kita leh print whole string dalam argv[4]. Ok. Terima kasih Quote Share this post Link to post Share on other sites
CFoo++ 4 Report post Posted April 17, 2007 (edited) #include <stdio.h> #include <string.h> #include <stdlib.h> #define XMAX 65 #define YMAX 32 char screen[XMAX][YMAX]; void printScreen(void); void fill(int, int, char); void isi(int, int, char); int main(int argc, char *argv[]) { FILE *in; int x, y, m, n; char a; if (argc!= 5) { fprintf(stderr,"Usage:\n\t%s <65x32 text file> <x> <y> <letter>\n",argv[0]); exit(1); } in = fopen(argv[1],"r"); if (in == NULL) { perror("opening input file"); exit(1); } for (y=0; y<YMAX; y++) { for (x=0; x<XMAX; x++) screen[x][y] = fgetc(in); } if (fclose(in)) { perror("closing input file"); exit(1); } printScreen(); x = atoi(argv[2]); y = atoi(argv[3]); a = argv[4][0]; fill(x,y,a); printScreen(); } void printScreen(void) { int x,y; for (y=0; y<YMAX; y++) for (x=0; x<XMAX; x++) if(screen[x][y]!= EOF) putchar(screen[x][y]); else puts("\n"); } void fill(int x, int y, char a) { if ((screen[x][y] != ' ')) return; screen[x][y] = a; fill(x,y+1,a); fill(x,y-1,a); fill(x+1,y,a); fill(x-1,y,a); }Code kat atas ni fungsi dia macam paint bucket dalam paint. Problem dia sekarang macam mana saya nak buat kita leh print whole string dalam argv[4]. Kalau yang kat atas tu argv[4][0] akan print first character untuk string dalam argv[4]. Macam mana nk buat bg kita leh print whole string dalam argv[4]. Ok. Terima kasihTak yah boh [0], pakai argv[4] je, contoh:printf("%s", argv[4]);kalu nak boh gak kena pakai &, contoh:printf("%s", &argv[4][0]);baik tak payah boh laa... lagi mudah. Edited April 17, 2007 by CFoo++ Quote Share this post Link to post Share on other sites
Mirage_Angel 0 Report post Posted April 17, 2007 (edited) Tak yah boh [0], pakai argv[4] je, contoh:printf("%s", argv[4]);kalu nak boh gak kena pakai &, contoh:printf("%s", &argv[4][0]);baik tak payah boh laa... lagi mudah.masalahnya kat sini x guna printf. screen[x][y] berfungsi sebagai printf. Yang ni recursion. Jadi terpaksa assign char kepada pointer. bila cuba char *a = argv[4], boleh tapi still print first character dalam string argv[4].ni contoh output dier . output ni kalau kita pilih I untuk argv[4]. Edited April 17, 2007 by Mirage_Angel Quote Share this post Link to post Share on other sites
CFoo++ 4 Report post Posted April 17, 2007 (edited) Aku tak biasa ngan program console ni, cume boleh cite cam ni...argv[4] adalah pointer ke string yang dimasukkan sebagai command line argument yang ke 5. Biasanya 0 terminated string.argv[4][0] adalah karakter pertama, argv[4][1] karakter kedua dan seterusnya.Jika argv[4][n] == 0, maknanya itu dah penghujung string tersebut (terminator).Lebih kurang cam tu lah, harap dpt membantu. Edited April 17, 2007 by CFoo++ Quote Share this post Link to post Share on other sites
Stranger 0 Report post Posted April 17, 2007 #include <stdio.h> #include <string.h> #include <stdlib.h> #define XMAX 65 #define YMAX 32 char screen[XMAX][YMAX]; void printScreen(void); void fill(int, int, char*, int); int main(int argc, char *argv[]) { FILE *in; int x, y; char* a; int ArraySize; if (argc!= 5) { fprintf(stderr,"Usage:\n\t%s <65x32 text file> <x> <y> <letter>\n",argv[0]); exit(1); } in = fopen(argv[1],"r"); if (in == NULL) { perror("opening input file"); exit(1); } for (y=0; y<YMAX; y++) { for (x=0; x<XMAX; x++) screen[x][y] = fgetc(in); } if (fclose(in)) { perror("closing input file"); exit(1); } printScreen(); x = atoi(argv[2]); y = atoi(argv[3]); a = argv[4]; ArraySize = 0; while (a[ArraySize] ^ 0) ArraySize++; fill(x,y,a, ArraySize); printScreen(); } void printScreen (void) { int x,y; for (y=0; y<YMAX; y++) for (x=0; x<XMAX; x++) if(screen[x][y]!= EOF) putchar(screen[x][y]); else puts("\n"); } void fill(int x, int y, char* a, int i) { if (screen[x][y] != ' ') return; screen[x][y] = *a; /* ko adjust la sendiri cmne ko nk layout die... */ fill(x+1,y,a++,i); if (*a == 0) a-=i; fill(x-1,y,a,i); fill(x,y+1,a,i); fill(x,y-1,a,i); } Quote Share this post Link to post Share on other sites
Mirage_Angel 0 Report post Posted April 17, 2007 (edited) Terima kasih banyak banyak Stranger. Power la ko. Arigato Gozaimasu. Setelah sekian lama mencari jawapan akhirnya dapat gak. Sebenarnya ni soalan tuto aku. Tuto tu suruh leh wat print je tapi aku saja ja nak tambah ilmu lebih nak buat advance sket leh print string. Oo camtu rupanya. Terima kasih yer.Stranger,Leh terang sket x ape fungsi code ni ArraySize = 0; while (a[ArraySize] ^ 0) ArraySize++; kenape mesti kuasa 0? bukanke semua nombor kalau kuasa kosong akan jadi 1. Maknenyer true. kenaper perlu condition ni dan ni if (*a == 0) a-=i;Ape fungsi code di atas ni?Ok. Thanks Edited April 17, 2007 by Mirage_Angel Quote Share this post Link to post Share on other sites
Stranger 0 Report post Posted April 17, 2007 Sbl tu, ko bce ni utk phmkn konsep array & pointer dlu... ArraySize = 0; while (a[ArraySize] ^ 0) ArraySize++; Ni smnenya utk check String Length, aku lupe ade function strlen() Aku pki XOR(^) sbb die lg pantas dr gune NOT EQUAL TO(!=) fill(x+1,y,a++,i); Yg ni (a++) aku advancekan pointer ke char seterusnya dlm array tu, cth, klu ko passed "12345" sbg command line die, next char should be '2' la kan... if (*a == 0) a-=i;ni kte validate string tu since string is terminated by a null char (char code 0) & reset ke position asal (memory location utk '1') sebab kte dh advancekan pointer tu during each time die call function fill()...klu x letak ni pn bleh gk, tp akan keluar char yg mengarut sbg output die.sbbnye, string yg sepatutnye ade "12345", akan jd lain coz kte dah akses memory location yg xsepatutnye kte akses (memory location selain drpd memory location utk string "12345") & lebih truk g mungkin akan dpt error klu memory location tu invalid... Quote Share this post Link to post Share on other sites
Mirage_Angel 0 Report post Posted April 18, 2007 (edited) Yang mengenai strlen tu selalunya aku guna bersama ngan fgets. sepatutnya macam ni kan a[strlen(a)-1] == 'slash 0' tp aku try sekali ngan bitwise operator tu x leh pun. while(a[strlen(arraySize)-1] ^ 0) arraySize++; null character bukan ke 'slash 0' . Selalunya kalau string contohnya "ABC" bukan ke dianyer location "A,B,C," kenapa kita guna comparison if(*a == 0) a-=i; kenaper bukan if(*a == 'slash 0') a-=i; dan a-=ia = a - i; jadi kalau a = 0 dan i = 0, jadi total a = 0 - 0 = 0 kan. kalau i = 1 akan jadi -1. Jadi ape tujuan sebenarnya.Lagi satu output yang aku dapat terbalik. Aku cuba nak try edit layout ikut kehendak aku, tp still confuse. naper yang check condition kalau null character hanya selepas koordinat x,y+1. Naper kita hanya leh buat condition a++ untuk function call x,y+1. untuk yang lagi 3 x leh plak. Dia akan keluar output yang gile2. Ok. Thanks Edited April 18, 2007 by Mirage_Angel Quote Share this post Link to post Share on other sites
Stranger 0 Report post Posted April 18, 2007 (edited) strlen()ArraySize = strlen (a); aku directly assign character code: sepatutnye ade cast sbl character code, tp aku mls nk wt coz VC++ x issue warning or error, compiler len mungkin kot... if(*a == (char)0) a-=i; yg /0 tu pun bleh gk, tp ne wt cmni if(*a == '/0') a-=i; ko dh bce & phmkn lom link yg aku bg tu? tujuan sebenar die utk navigate between memory location a-=i; a = memory location *a = value yg contain kt variable tu so a x akan jd 0 coz die memory location, klu *a tu akn jd 0 coz die contain value Ni example... #include <stdio.h> void main() { char String[] = "12345"; char* MemoryLocation = NULL; MemoryLocation = String; printf ("Memory Location for the first string occurence = 0x%x \n", MemoryLocation); printf ("Value = `%c' \n\n", *MemoryLocation); MemoryLocation++; printf ("Memory Location for the second string occurence = 0x%x \n", MemoryLocation); printf ("Value = `%c' \n\n", *MemoryLocation); MemoryLocation++; printf ("Memory Location for the third string occurence = 0x%x \n", MemoryLocation); printf ("Value = `%c' \n\n", *MemoryLocation); MemoryLocation++; printf ("Memory Location for the fourth string occurence = 0x%x \n", MemoryLocation); printf ("Value = `%c' \n\n", *MemoryLocation); MemoryLocation++; printf ("Memory Location for the fifth string occurence = 0x%x \n", MemoryLocation); printf ("Value = `%c' \n\n", *MemoryLocation); } i plak x akan jd 0 gk coz program ko ni require 5 argumnents i jugak x akan berubah value die, tu kan string length??? if (argc!= 5) { fprintf(stderr,"Usage:\n\t%s <65x32 text file> <x> <y> <letter>\n",argv[0]); exit(1); }yg psl layout 2 aku pn pening ckit , nnt ade mase aku tgk blk... Edited April 18, 2007 by Stranger Quote Share this post Link to post Share on other sites
Mirage_Angel 0 Report post Posted April 19, 2007 Aduh susahnya nak masuk website putera.com ni.#include <stdio.h> #include <string.h> #include <stdlib.h> #define XMAX 65 #define YMAX 32 char screen[XMAX][YMAX]; void printScreen(void); void fill(int, int, char*, int); int main(int argc, char *argv[]) { FILE *in; int x, y; char *a; int ArraySize; if (argc!= 5) { fprintf(stderr,"Usage:\n\t%s <65x32 text file> <x> <y> <sentences>\n",argv[0]); exit(1); } in = fopen(argv[1],"r"); if (in == NULL) { perror("opening input file"); exit(1); } for (y=0; y<YMAX; y++) { for (x=0; x<XMAX; x++) screen[x][y] = fgetc(in); } if (fclose(in)) { perror("closing input file"); exit(1); } x = atoi(argv[2]); y = atoi(argv[3]); a = argv[4]; ArraySize = strlen(a); while (a[ArraySize] != 0) ArraySize++; fill(x,y,a,ArraySize); printScreen(); } void printScreen (void) { int x,y; for (y=0; y<YMAX; y++) for (x=0; x<XMAX; x++) if(screen[x][y]!= EOF) putchar(screen[x][y]); else puts("\n"); } void fill(int x, int y, char *a, int i) { if (screen[x][y] != ' ') return; screen[x][y] = *a; if((x < 0)||(x>65)||(y<0)||(y>32)) return; a++; if(*a == '') a-=i; fill(x+1,y,a,i); fill(x,y+1,a,i); fill(x,y-1,a,i); fill(x-1,y,a,i);/*kalau buang yang ni dia print ke kanan atas bawah ok. Kalau ada dia campur aduk*/ }Ni code yang aku dah ubah suai. Bila print ke kanan, bawah dan atas ok tapi bila ke kiri dia ada problem. Ader idea x camna nak fix problem ni. Quote Share this post Link to post Share on other sites