קריאה מקובץ ב C

  • פותח הנושא BMWE
  • פורסם בתאריך

BMWE

New member
קריאה מקובץ ב C

אני רוצה לקרוא מידע מקובץ (מחרוזת), באורך ידוע מראש של 8 תוים. איך עושים זאת? (המחרוזת צריכה לכלול כל התווים שיש באמצע (כולל רווחים, סימני פיסוק, ו carriage return+line feed ). 10x לעונים
 

nosa85

New member
../images/Emo19.gifניצול שרשור- שאלה קטנה..

בקומפלציה ב C שאיגות מסוג להלן על מה מצביעות? parse error before '=' token זה אמור להיות שגיאת SYNTAX? כי אני לא מוצאת משהו לא נכון ויש לי כמה כאלה והתוכנה לא עובדת
זה נורא מעצבן!! תודה מראש
 

BMWE

New member
חסר נקודה פסיק שורה לפני או באותה

שורה
 

nosa85

New member
אבל יש נקודה פסיק

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

DecayCell

New member
קומפיילרים לא משתגעים ../images/Emo13.gif

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

nosa85

New member
אז ככה..

כן, אבל זה די מעצבן, אני לא יודעת מה הבעיה
הנה פונקציה שיש בה 2 שגירות, אחת בשירה של הFOR והשנייה בשורה הראשונה. הפונקציה מאתחלת מערך ב-1 וK הוא קבוע שמוגדר בתוכנית. הנה הקוד:
void inti(int arr[K]) { int j; for(j=0;j==K-1;j++) { arr[j]= -1; } }​
אם תסבירו לי מה יכולה להיות הבעיה זה יעזור לי מאוד כי יש לי שגיאות כאלה בכל התוכנית
 

codec

New member
למרבה הפלא

העסק עובר קומפילציה בסדר... או שיכול להיות שהבעיה שלך היא בקוד שמסביב (וכנראה אני לא הוספתי אותו בדיוק כמוך...) איך מוגדר K? איך את קוראת לפונקציה?
 

nosa85

New member
אז?

גמני חשבתי שזה יהיה בK K אמור להיות קבוע בתוכנית, הגדרתי אותו ככה
#define K=50;​
ואת המערך הגדרתי כEXTERN
extern int arr[50];​
ושאלה קטנה אחת, אם אני מגדירה את המערך בתוך הMAIN ולא לפניו אפשר להשתמש בו בתוך הפונקציות - אם שולחים כפרמטר או שצריכים לעשות בEXTERN
רבה
 

galh

New member
אתה בטוחה שככה הגדרת?!

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

nosa85

New member
../images/Emo51.gif ו..

הסרתי את ה= מהDEFINE אבל עדיין יש את אותן שגיאות, זה קושר אולי להגדרת שני המערכים שלי:
extern int arr[50]; extern int level[11];​
המערכים כך מוגדרים כגלובלים (לפני הMAIN) נכון? אני לא מצליחה להבין למה זה לא עובד
 

giladznaor

New member
ועוד דבר

מלבד להוריד את תו ה';' בסוף הDEFINE. ההגדרה של המשתנים הגלובליים האלא נכונה רק אם יש קובץ נוסף שבו יש:
int arr[50]; extern int level[11];​
המשמעות של הextern היא להגיד לקומפיילר שיש משתנים כאלה במקום אחר. אם אין כאלה, אז הקובץ לא יעבור את שלב הlinking. אם את עובדת בקובץ קוד יחיד, ובסה"כ רוצים משתנים גלובלים, פשוט אין צורך לכתוב extern, עצם ההגדרה של המשתנים מחוץ לפונקציה מגדירה אותם כגלובליים (לקובץ קוד זה). מקווה שזה עוזר...
 

nosa85

New member
אהה.. הבנתי../images/Emo9.gif

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

giladznaor

New member
סביר להניח

שהבעיה היא בה ';' שבשורה של הDEFINE (בנוסף לסימן ה '=', שלא אמור להיות שם). חשוב מאוד להבין את ההבדל בין DEFINE לבין const. DEFINE הוא לא באמת משתנה קבוע, אלא הגדרת PRECOMPILER. מה שזה אומר, שלפני שהקומפיילר מקפל, הוא עובר על כל הקובץ ומחליף את כל הK ב 50;. כך שאיפה שיש לך
for ( i = 0; i <= arr[K]; i++ )​
הופך לזה:
for ( i = 0; i <= arr[50;]; i++)​
מה שכמובן ייתן לך שגיאה. לגבי השאלה השניה - כל משתנה שמוגדר בתוך פונקציה ניתן לשימוש רק בתוך הפונקציה. אם שולחים אותו כפרמטר לפונקציה אחרת אז ניתן להשתמש בו (האמת, בעותק שלו) ע"פ השם שמוגדר לו בהגדרה של הפונקציה. השימוש של extern הוא לשימוש במשתנים שהוגדרו בקובץ קוד אחר.
 

nosa85

New member
ואאוו..

כל השגיאות האלה שלא ידעתי מאיפה הן באו זה מ; שבDEFINE! אמרת שזה שונה מהCONST, איך מגדירים CONST אם כן בC? ואמרת אקסטרן זה למשתנים מקובץ אחר, אז זאת אומרת אם אני שמה הגשרה רגילה לפני הMAIN בלי האקסטרן זה יעבוד כמודצריך בקובץ הזה? ועוד משהו מה השגיאה הזאת אמורה להביע? היא חוזרת על עצמה בכל מיני מקומות בקוד..
[Linker error] undefined reference to `level'​
ליבל הוא מערך
 

OriIdan

New member
מה השגיאה

זה אומר שפנית למשתנה level כאשר הוא לא הוגדר. יכול להיות שבקובץ אחד הוא הוגדר כ extern אבל בשום קובץ אחר לא הוגדר?
 

DNile

New member
קומפיילרים כן משתגעים...

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