פורסם 2012 במאי 1713 שנים הקבוצה היא משתנה ששמו A?אין דרך לדעת בזמן ריצה מהם שמות המשתנים שלך (אחרי הקומפילציה אין להם בכלל שמות יותר).
פורסם 2012 במאי 1713 שנים מחבר לא הבנתי....אז איך אני יכול מקלט כזה:read_set A,2,4,12,54,-1להכניס לתוך קבוצה A את המשתנים?A היא מערך של char בגודל 16
פורסם 2012 במאי 1713 שנים מה זאת אומרת? פשוט תכתוב קוד שעושה את זה. כתבת את הפונקציות שמדליקות ומכבות את הביטים בטיפוס שלך? אז תקרא את המחרוזת, תנתח אותה (כאמור באמצעות הפונקציות strtok וחברותיה) ותשתמש בפונקציות הנ"ל כדי להדליק את הביטים באיזה משתנה שמחזיק את הקבוצה שלך.יש לך כמה קבוצות? אז תמצא דרך לתת "שמות" לקבוצות ולמפות בין שם הקבוצה למשתנה שמחזיק אותה (כי כמו שאמרתי, לשמות המשתנים אין משמעות בזמן ריצה).
פורסם 2012 במאי 1813 שנים מחבר הצלחתי לפרק את הstring שהמשתמש הכניסאני צריך בבקשה הסבר איך בונים ''מילון'', זאת אומרת למשל יש לי "char *b= "abcd אני צריך לקרוא לפונקציה abcd יש אופציה לעשות switch ב-C למצב כזה?תודה.
פורסם 2012 במאי 1813 שנים אי אפשר לעשות switch על מחרוזות, מקסימום אפשר על תו בודד. אתה יכול לעשות את מה שאתה רוצה עם שרשרת של ifים (נראה לי שזה הפתרון הכי פשוט כאן). תזכור שבשביל להשוות מחרוזות משתמשים בstrcmp.
פורסם 2012 במאי 1813 שנים בבקשה.חוץ מזה, יש כמה דרכים די פשוטות לממש "מילון" פשוט ב-C. דרך אחת היא ליצור struct עם שני שדות - שם של האובייקט והאובייקט עצמו, ואז פשוט להחזיק מערך של ה-struct הזה. כשאתה מקבל מחרוזת אתה פשוט צריך לרוץ על המערך ולחפש את האובייקט עם השם המתאים. זה אמנם פתרון לא יעיל במיוחד, אבל כשמדובר ברשימה קטנה ופשוטה זה לא ממש משנה.
פורסם 2012 במאי 1913 שנים מחבר זה מה שעשיתי.struct{ char *name; set *s;}sets[]={ {"a",&A}, {"b",&B}, {"c",&C}, {"d",&D}, {"e",&E}, {"f",&F}, {"A",&A}, {"B",&B}, {"C",&C}, {"D",&D}, {"E",&E}, {"F",&F}, {"#",NULL}};אני בודק את הקלט הרלוונטי מהמשתמש בעזרת strcmpואז אני נתקל בבעיה....אני לא יודע איך להכנס לקבוצה ולערוך בה את השינויים שאני רוצה כי אני לא מצליח לשלוח את sets.s לפונקציה שמקבל משתנה מסוג set.
פורסם 2012 במאי 1913 שנים מחבר הצלחתי בסוף....הייתי צריך להוסיף * לפונקציה שמקבלת את ה set איך אני יכול לבדוק אם הפעולה של הדלקת הביט עובדת?כרגע זה הקוד הראשוני להדלקה למרות שאני לא חושב שהוא נכון.void setbit(set *s, int i){ char b; int j; j=i; b=b|1; i=8%i; b=b<<i; *s[j/8]=*s[j/8]|b;} אם אני מוריד את השיוויון הקומפיילר פשוט מדלג על זה.
פורסם 2012 במאי 1913 שנים שלוש הערות:1. שים לב שאתה משתמש ב-b בלי שיש בו ערך כלשהו.2. במקום לעשות x = x | y אתה יכול פשוט לעשות x |= y.3. אתה משתמש במודולו לא נכון.
פורסם 2012 במאי 1913 שנים מחבר תודה. סידרתיאני צריך לעשות פונקציה שמדפיסה את המספרים מתוך הקבוצהיש דרך פשוטה לעשות את זה או שצריך לעבור על כל המערך של הקבוצה ולספור כל ביט שדלוק עד שמגיעים לביט ה127?זה פשוט לא נראה לי יעיל..
פורסם 2012 במאי 2013 שנים מחבר יש לי בעיה בפונקציה שקוראת את הקלט ומסדרת את הביטים. א-אני לא יודע אם זה באמת מסדר את הביטים כמו שצריך כי אני לא מוצא דרך לבדוק ב- שאני משתמש ב strcmp למרות שלפי הקומפיילר שניהם למשל "a" עדיין זה לא שווה ל 0 למרות שזה אמור להיות. int x=0,i=0,j=0; char *y,*c,*z; y=strtok(NULL,",");//group name from string c=sets[i].name; //group name from sets while(strcmp(y,c)!=0&&i<13){//check if thr name equal i++; c=sets[i].name; } if(strcmp(y,c)!=0){ printf("No such group"); return; }else{ z=strtok(NULL,",");//find num char x=strtol(z,NULL,0);//convert to int while(x!=-1&&x<=127){//-1=end of string set *s=sets[i].s; char b=0; int j=x;=1; x=x%8; b<<=x; j=j/8; *s[j]|=b; z=strtok(NULL,","); x=strtol(z,NULL,0); } if(x>127){ printf("%d is out of range",x); return; } }} void read_set(){
פורסם 2012 במאי 2013 שנים strcmp היא case sensitive. כלומר a ו-A הם לא אותו דבר.חוץ מזה, למה אתה לא משתמש בפונקציה setbit שכתבת קודם?
פורסם 2012 במאי 2013 שנים מחבר אני כרגע לא משתמש בה רק בגלל נוחות..ברגע שאני אדע שהיא פועלת אני אעשה את זה עם הפונקציה.משום מה אחרי הפעולה של הביטים אני רואה רק בתא הראשון של הקבוצה שבחרתי ריבוע ומספר - 16[] משהו כזה ובתאים אחרים יש 0 . כתבתי פונקציה שאמורה להדפיס את המספרים אבל משום מה זה לא עובד... printf("%d,",d); d++; *s[j]>>=1 if(*s[j]&=1==1){ d זה int שרץ עד ל 127
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.