הגדרת טיפוס ב typedef ב C - עמוד 3 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

הגדרת טיפוס ב typedef ב C


robicon

Recommended Posts

  • תגובות 126
  • נוצר
  • תגובה אחרונה

מה זאת אומרת? פשוט תכתוב קוד שעושה את זה. כתבת את הפונקציות שמדליקות ומכבות את הביטים בטיפוס שלך? אז תקרא את המחרוזת, תנתח אותה (כאמור באמצעות הפונקציות strtok וחברותיה) ותשתמש בפונקציות הנ"ל כדי להדליק את הביטים באיזה משתנה שמחזיק את הקבוצה שלך.

יש לך כמה קבוצות? אז תמצא דרך לתת "שמות" לקבוצות ולמפות בין שם הקבוצה למשתנה שמחזיק אותה (כי כמו שאמרתי, לשמות המשתנים אין משמעות בזמן ריצה).

קישור לתוכן
שתף באתרים אחרים

הצלחתי לפרק את הstring שהמשתמש הכניס

אני צריך בבקשה הסבר איך בונים ''מילון'', זאת אומרת למשל יש לי "char *b= "abcd אני צריך לקרוא לפונקציה abcd

יש אופציה לעשות switch ב-C למצב כזה?

תודה.

קישור לתוכן
שתף באתרים אחרים

אי אפשר לעשות switch על מחרוזות, מקסימום אפשר על תו בודד. אתה יכול לעשות את מה שאתה רוצה עם שרשרת של ifים (נראה לי שזה הפתרון הכי פשוט כאן). תזכור שבשביל להשוות מחרוזות משתמשים בstrcmp.

קישור לתוכן
שתף באתרים אחרים

בבקשה.

חוץ מזה, יש כמה דרכים די פשוטות לממש "מילון" פשוט ב-C. דרך אחת היא ליצור struct עם שני שדות - שם של האובייקט והאובייקט עצמו, ואז פשוט להחזיק מערך של ה-struct הזה. כשאתה מקבל מחרוזת אתה פשוט צריך לרוץ על המערך ולחפש את האובייקט עם השם המתאים. זה אמנם פתרון לא יעיל במיוחד, אבל כשמדובר ברשימה קטנה ופשוטה זה לא ממש משנה.

קישור לתוכן
שתף באתרים אחרים

זה מה שעשיתי.



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.

קישור לתוכן
שתף באתרים אחרים

הצלחתי בסוף....הייתי צריך להוסיף * לפונקציה שמקבלת את ה 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;

}

אם אני מוריד את השיוויון הקומפיילר פשוט מדלג על זה.

קישור לתוכן
שתף באתרים אחרים

תודה. סידרתי

אני צריך לעשות פונקציה שמדפיסה את המספרים מתוך הקבוצה

יש דרך פשוטה לעשות את זה או שצריך לעבור על כל המערך של הקבוצה ולספור כל ביט שדלוק עד שמגיעים לביט ה127?

זה פשוט לא נראה לי יעיל..

קישור לתוכן
שתף באתרים אחרים

יש לי בעיה בפונקציה שקוראת את הקלט ומסדרת את הביטים.

א-אני לא יודע אם זה באמת מסדר את הביטים כמו שצריך כי אני לא מוצא דרך לבדוק

ב- שאני משתמש ב 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;

B|=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(){

קישור לתוכן
שתף באתרים אחרים

אני כרגע לא משתמש בה רק בגלל נוחות..

ברגע שאני אדע שהיא פועלת אני אעשה את זה עם הפונקציה.

משום מה אחרי הפעולה של הביטים אני רואה רק בתא הראשון של הקבוצה שבחרתי ריבוע ומספר - 16[] משהו כזה ובתאים אחרים יש 0 .

כתבתי פונקציה שאמורה להדפיס את המספרים אבל משום מה זה לא עובד...


printf("%d,",d);
d++;
*s[j]>>=1
if(*s[j]&=1==1){

d זה int שרץ עד ל 127

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.


×
  • צור חדש...