פורסם 2012 במאי 3113 שנים כתבתי קוד שמחזיר פוינטר של char :char* two_num(int num){ int m=num/10; int n=num%10; char *c; switch(m) { case 2:c="twenty ";break; case 3:c="thirty ";break; case 4:c="forty ";break; case 5:c="fiftn ";break; case 6:c="sixty ";break; case 7:c="seventy ";break; case 8:c="eighty ";break; case 9:c="ninety ";break; break; } return c;} אני אמור לקבל מספר ולכתוב אותו באותיות.יש פונקציה נוספת שמוצאת את המספרים 1-10 ומחזירה *char רציתי לדעת אם יש דרך לחבר בין שניהם?אני רוצה להמשיך לכתוב את הפונקציה שאם ספרת האחדות גדולה מ0 אז להחזיר char שמייצג אותם.שאם אני מכניס למשל 25 יהיה לי c="twenty five"
פורסם 2012 במאי 3113 שנים כמובן, באמצעות פונקציות לטיפול במחרוזות:http://www.cplusplus.com/reference/clibrary/cstring/strcathttp://www.cplusplus.com/reference/clibrary/cstring/strcpyשים לב אבל לדבר מאוד חשוב: הפונקציה strcat מקבלת שתי מחרוזות (דהיינו שני מערכים של char) ומשרשרת את השנייה לסוף הראשונה. בשביל זה צריך שני דברים: שיהיה אפשר לכתוב למערך הראשון, ושיהיה מספיק מקום לשרשור שלהן (כלומר לפחות סכום אורכי המחרוזות + 1). לדוגמה, בקוד של two_num שנתת המחרוזת שחוזרת היא מחרוזת קבועה בזכרון, ואי אפשר לכתוב עליה (קומפיילרים מסוימים אפילו יכריחו את ערך ההחזרה של הפונקציה להיות *const char במקרה כזה). תצטרך קודם כל להעתיק את התוצאה למערך חדש שאליו אתה כן יכול לכתוב.
פורסם 2012 במאי 3113 שנים מחבר רק בשביל לדעת שהדרך שלי נכונה....המטרה של התכנית זה לקבל מספר מ 1-99 ולהחזיר אותו במילים בשביל שב main אני יוכל או להכניס אותו לקובץ או בפלט הסטנדרטיבקובץ(תוכנית) שמקבל את המספר והופך אותו למילים יש פונקציה שבודקת את המספר ושולחת אותו לפונקציה המתאימה בשביל להפוך אותו למילים.מה שעשיתי זה 3 פונקציות שאחת לאחדות אחת ל 11-19 ואחת למספרים 20,30,40,50,60,......ובפונקציה הזאת אני בודק אם קיים מספר אחדות ואם כן אני צריך לחבר אותם.הפונקציה שבודקת לאן לשלוח את המספר מחזירה *char עכשיו השאלה שלי אם זאת הדרך הנכונה לעשות דבר כזה כי אני רוצה בסופו של דבר לשלוח *char ל main ואני דיי נתקע עם הקטע של להוסיף כיתוב ב two_num כי אני מצליח לחבר אבל לא להחזיר את זה בתור c* (אני מחזיר את זה בתור c* אבל שאני מנססה להדפיס זה מדפיס לי ג'יבריש) ושאר הפונקציות מדפיסות בסדר.
פורסם 2012 במאי 3113 שנים שים לב שאם אתה רוצה להחזיר char* אתה צריך לשלוח לפונקציה מצביע אליו, כלומר char**.
פורסם 2012 במאי 3113 שנים כן, הרעיון שלך נכון. השאלה היא פשוט איך אתה עושה את זה, והאם אתה מטפל במחרוזות בצורה נכונה. תזכור שמחרוזת זה בעצם מערך של תווים, וצריך להשתמש בפונקציות מתאימות בשביל לעבוד עם מחרוזות.תסתכל על הדוגמאות של strcat ו-strcpy שנתתי לך ותבין.עוד משהו חשוב שלא ציינתי קודם: אם אתה כותב פונקציה שמחזירה *char, אסור שהיא תחזיר מצביע למערך מקומי שהגדרת בתוך הפונקציה. דהיינו, דבר כזה:char* foo() { char buffer[80]; strcpy(buffer, "Hello!"); return buffer;}הוא אסור בתכלית האיסור, כי המערך buffer יימחק ברגע שאתה יוצא מהפונקציה.באיזו מסגרת אתה לומד C? כמה למדת לעומק התעסקות עם מערכים, מצביעים ומחרוזות?
פורסם 2012 במאי 3113 שנים מחבר אוקיי אז פשוט להגדיר מערך buffer מחוץ לפונקציה ואז אחרי שהוא מכיל את 2 המספרים לעשות c=buffer ולהחזיר את c?אני לומד כרגע c בפתוחה ולמדתי לפני ג'אווה....ככה שאני לא רגיל לפויינטרים...
פורסם 2012 במאי 3113 שנים תעשה שהפונקציה מקבלת את ה-buffer, כותבת לתוכו ולא מחזירה כלום. עדיף להימנע מלהגדיר משתנים גלובליים (משתנים שמוגדרים מחוץ לפונקציה). מי שקורא לפונקציה (לדוגמה, ה-main) הוא זה שיגדיר את ה-buffer.כמובן תדאג שה-buffer יהיה בגודל שיספיק בשביל המחרוזת הארוכה ביותר שלך (נגיד, 100 זה בטוח יספיק).
פורסם 2012 ביוני 513 שנים מחבר יש לי בעיה... כאשר אני מקבל בקלט רווח או אות אז זה מחזיר לי 0נסיתי להשתמש ב strtol אבל עדיין יש בעיות עם הרווח. זה הקוד:fgets(numbers,100,stdin); c=strtok(numbers," "); while(c!=NULL){ num=atoi(c); printf("%s",num_chek(num)); c=strtok(NULL," "); }
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.