בעיה בתוכנית

א ה מ

New member
בעיה בתוכנית

שלום, אני צריכה להגיש תוכנית בc שבמקום להשתמש בcin ו cout תקבל נתונים מקובץ input חיצוני. אני לא מצליחה לעשות את הקישור בין התוכנית לקובץ אנא, עזרו לי, אני יושבת על זה כבר המון זמן! אשמח ממש אם מישהו יוכל להסביר לי בשפה הכי בסיסית וברורה, מה אני צריכה לעשות. תודה רבה רבה!!
 

immortalus

New member
זה C או ++C? ויש הבדל...

cin ו-cout לא מוגדרים בכלל ב-C, אלו מבנים של ++C. ב-C את צריכה את הספרייה stdio.h להגדיר משתנה מסוג FILE* להשתמש לתוכו בפונק' fopen ואז לקרוא בעזרת fscanf או fgets. אם בכל זאת תתעקשי על ++C אזי בתוך הספרייה iostream קיימים גם הטיפוסים istream, ostream ו-fstream. פשוט תגדירי istream (קלט) לקובץ המבוקש ומשם השימוש הוא בדיוק כמו ב-cin. כנ"ל לגבי ostream. שיהיה בהצלחה!
 

א ה מ

New member
c עם תוספות מc++

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

immortalus

New member
אופס, ENTER במקום TAB וזה נשלח.. המשך:

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

א ה מ

New member
אני לא בחרתי לבד מה ללמוד..

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

immortalus

New member
מה את מנסה לעשות?

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

1ca1

New member
את צריכה לשים את הקובץ ואת התוכנית באותו מקום

(למען האמת את לא צריכה, אבל זה יהיה יותר נוח להרצה ולחפש אותו). בעיקרון תעשי דיבאגינג, תוודאי שאת קולטת את השם של הקובץ נכון, (מן הסתם אם מדובר באינפוט אולי את מקבלת אותו בarglist?, תוודאי שאת עובדת איתו נכון). אחרי fopen, תוודאי שקיבלת מצביע שהוא לא נאל, אח"כ fgets אמור לסדר אותך (בהנחה שמדובר בקובץ טקסט, בבינארי זה קצת יותר בעייתי). כדאי גם אולי להעביר את הדיון הזה לפורום שפות תכנות. נ.ב. סתם מתוך התעניינות, איזה אוניברסיטה אמרה לך לעבוד עם cin בc? (כאילו זה הרבה יותר נוח, אבל זה כל כך לא נכון, שאם הייתי מעסיק למשל בראיון עבודה, לא הייתי מתייחס אליך ברצינות).
 

א ה מ

New member
איך אני מוודאת

שקלטתי נכון? מה זה arglist? (אני לומדת מבוא לחישוב כקורס קטן מאוד ומצומצם,ואני לא בקיאה בנושא..) מה זאת אומרת "מצביע שהוא לא נאל"? ואני חייבת להשתמש בfgets? אנחנו לא בדיוק לומדים c ולא בדיוק c++ מן שילוב.. (כתבתי מראש שאני צריכה פירוט ברמה הכי בסיסית לא סתם..) אני אמורה לקבל מהקובץ כמה מספרים, לשחק קצת איתם ולפלוט משהו (לאן הפלט אמור להגיע? כרגיל או גם לקובץ?)
 

1ca1

New member
יודעת מה זה מצביע?

את לא חייבת fgets, את יכולה כל דבר שקולט מFILE, לא זוכר את כל הפונקציות. arglist (או argv) הוא מערך מגודל לא ידוע בתחילת הריצה, שמכיל את ה"פרמטרים" שמעבירים לפונקציה main, מכירה את כל ה -l למיניהם וכו' בכל הפקודות יוניקס? אותו רעיון (אלא אם כן את צריכה לגשת לקובץ קבוע, ואז קבלי ביטול). כשאת עושה fopen, מה שזה מחזיר לך זה מצביע מסוג FILE, אם הפתיחה לא הצליחה, המצביע יהיה נאל (null). לגבי הפקודות עצמם, man בקונסול של יוניקס הכי טוב (אם לא לפי דעתי יש את הפירוט המלא באינטרנט איפשהו, פשוט לגגל עם שם הפקודה).
 
למעלה