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

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


robicon

Recommended Posts

קראתי אבל אני עדיין לא מבין למה.

אחרי שאני ''שולף'' את האות הפונקציה מצביע לNULL אבל האות קיימת אצלי במשתנה

אז אי אפשר להשתמש בפונקציה הזאת להוציא מהקלט הזה את האות האחרונה?

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

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

תסתכל על המחרוזת בדיוק. לא רק על התו הראשון שלה, אלא על כל המחרוזת. תבדוק מה האורך שלה אם צריך. תקרא בפירוט את התיעוד של fgets ותבין למה המחרוזת לא מכילה רק את התו 'a'.

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

ברגע שמבצעים פעולת הזזה של ביט : s>>=1לא ניתן להשתמש בו שוב?

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

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

קראתי שוב...

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

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

אם הבנתי נכון כאשר אני רוצה לבדוק ביט אחד שמאלה אני עושה :b>>1 ואז אם b היה למשל: 00000101 הוא ניהיה 00000010

ואז אני עושה בדיקה b&1==1

לא ככה?

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

אתה יודע, מותר לשלב יותר מאופרטור אחד בביטוי. אתה לא חייב להגדיר משתנה, להפעיל עליו <<, לשמור את התוצאה במשתנה חדש, ואז להפעיל על זה &. אפשר לעשות הכל בשורה אחת פשוטה וברורה.

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

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

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

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



for(i=0;i<=12;i++){

k=0;

B|=*s[i];

while(k<=7){

if(b&1==1){

printf("%d,",d);

d++;

k++;

j++;

b>>=1;

if(j==16){

printf("/n");

j=0;

}

}else{

d++;

k++;

b>>=1;

}

}

}

אני יודע שזה שהקוד לא אלגנטי..

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

מאקרו? מי אמר בכלל לכתוב מאקרו?

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

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

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

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

אבל עדיין זה מוצא לי מספרים בתאים שבכלל לא נגעתי בהם אני מכניס לפונקציה 1,2,3,4 וזה מוצא לי אותם ומוסיף לי 86,87

אין לי מושג איך זה קורה ואיך זה מדליק ביטים בתאים שבכלל אני לא מגיע אליהם חוץ מאשר שאני בודק אותם.

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

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



void print_set(){

set *b;

int k=0;

b=checkname();//b-point to the group

for(int i=0;i<128;i++){

if(checkbit1(b,i)==1){

printf("%d,",i);

k=1;

}

}

if(k==0){

printf("the group is empty\n");

}

printf("\n");

} int checkbit1(set *s,int num){

char b=0;

int i;

i=num;

i=i/8;

num=num%8;

B|=*s[i];

if(b>>num&1==1){

return 1;

}else{

return 0;

}

}


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

היא בודקת את הקלט של המשתמש ומחזירה את הקבוצה המתאימה



set* checkname(){

char *a,*b;

int i=0;

a=sets[i].name;

b=strtok(NULL," ,");

while(strcmp(b,a)!=0&&i<=11){

i++;

a=sets[i].name;

}

if(strcmp(b,a)!=0){

printf("No such group\n");

return 0;

}else{

return sets[i].s;

}

return 0;

}

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

ארכיון

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


×
  • צור חדש...