עבור לתוכן

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

Featured Replies

פורסם

אני מציע לך שתעשה חזרה על אופרטורים ותבין מה ההבדל בין אופרטור & ואופרטור =&.

ולגבי זה:

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

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

זה אומר שאתה לא עובד בצורה נכונה.

כשמתכנתים, אחד מהדברים החשובים הוא אבסטרקציה (הפשטה). הרעיון הוא לפרק את התכנית שלך למרכיבים בסיסיים ואז לממש כל אחד מהם בנפרד. לדוגמה, במקרה שלך, כתוב את הפונקציות setbit, clearbit ו-getbit ותוודא שהן עובדות, בנפרד משאר התוכנית. כתוב אותן, ואז כתוב main פשוט שבודק את הנכונות שלהן. מה זה אומר פשוט? שהכל יהיה hard coded, דהיינו בלי שום קלט מהמשתמש - פשוט צור קבוצה ותכניס לתוכה איברים באמצעות הפונקציות הנ"ל, ואז תוודא שהן עובדות נכון (כלומר, אם אתה מכניס לדוגמה את המספר 5 לקבוצה, אז לאחר מכן getbit תחזיר שהאיבר 5 נמצא בקבוצה).

חשוב מאוד שה-main שלך לא ייגש למערך ישירות - תדאג שהוא ישתמש אך ורק בפונקציות שהגדרת.

אחרי שכבר יש לך את זה ואתה יודע שהפונקציות עובדות כהלכה, תוסיף את הפונקציה שמדפיסה את האיברים בקבוצה. גם אותה תבדוק ע"י main פשוט שרק יוסיף איברים כלשהם (קבועים בקוד) לקבוצה, ותדפיס אותה. חוץ מזה, תדאג שהפונקציה הזו תשתמש בפונקציות שהגדרת קודם - אין שום סיבה שהיא תיגש ישירות למערך.

אחרי שאתה יודע שכל הפונקציות עובדות כהלכה, רק אז תמשיך לכתוב את התכנית הראשית.

  • תגובות 126
  • צפיות 11k
  • נוצר
  • תגובה אחרונה
פורסם
  • מחבר

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

בכל אופן פיצלתי וגם כתבתי פונקציה שבודקת ומדפיסה.

אבל עדיין יש לי בעיה עם ה strlok המשתמש מכניס משפט כזה למשל:print_set a

והפונקציה שאני שם בשביל לקרוא את ה a בתוך הפונקציה print_set היא:



strtok(NULL," ");

זה מוצא לי את a אבל עדיין לא מחזיר לי 0. אתה יודע למה?

פורסם
  • מחבר

שניהם אותו דבר. "a" ו "a" עם מספר 97 בצד.

אני לא מצליח להבין למה זה קורה... זה מחזיר לי 1 ולא 0 כאשר אני משווה בניהם עם strcmp

פורסם

מה זאת אומרת?

"a" ו "a" עם מספר 97 בצד.

האם שניהם מחרוזת שמכילה רק תו אחד 'a'?

ותעלה את הקוד המלא, שיהיה יותר ברור.

פורסם
  • מחבר



void print_set(){

int i=0;

char *t,*c;

c=sets[i].name;

t=strtok(NULL," ");

while(strcmp(t,c)!=0&&i<=12){

i++;

c=sets[i].name;

}

if(strcmp(t,c)!=0){

printf("No such group");

return;

}else{

checkbit(sets[i].s);

}

}

פורסם

א. זה לא הקוד המלא (מי קורא ל-print_set? איזה קריאות ל-strtok מתבצעות לפני כן?)

ב. איזה קלט אתה מזין לתכנית?

פורסם
  • מחבר

ב main :



char g[100];

fgets(g,100,stdin);

char *s=strtok(g," ");

func(s);

והפונקציה func משווה את הקלט עם כל הפונקציות ובוחרת במתאים ואז מפעילה את הפונקציה שהמשתמש בחר.

פורסם
  • מחבר

אני משתמש ב fgets וקורא את מה שהמשתמש מכניס לתוך מחרוזת של char

ואני שולח לתכנית char.

פורסם

:facepalm:

אני אחזור על עצמי:

איזה קלט אתה מזין לתכנית? מה אתה מקליד?

פורסם
  • מחבר

אה אז תגיד.....

read_set a,2,3,4,5,6,7,-1

print_set a

פורסם

אז ברור שזה לא יעבוד. לא הזנת ל-strtok את התווים הנכונים.

פורסם
  • מחבר

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

איך אני יכול לסמן את זה?

ארכיון

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

דיונים חדשים