פורסם 2012 בדצמבר 112 שנים שלום,יש לי תרגיל בC שאני צריך קצת עזרה בגישה אליו.עליכם לכתוב תכנית שתקלוט מקובץ סדרות תווים (ללא מספרים) בגודל X. כל שורת תווים תיגמר בנקודה.לאחר מכן, תדפיס התוכנית את הנתונים הבאים עבור הסדרות שנקלטו:.1 התו הכי גדול בשתי הסדרות (ASCII) ..2 התו הכי קטן בשתי הסדרות (ASCII) ..3 התו ההנפוץ ביותר בשתי הסדרות (במידה ויש כמה בעלי אותה שכיחות, יש להדפיס את התו שערכו ה ASCIIהוא הקטן ביותר)..4 סדרת התווים המשותפים לשתי הסדרות (ללא חזרות) - מודפסים לפי הסדר בטבלת ה ASCII .*שימו לב! עליכם לבדוק את תקינות הקלט, במקרה של קלט שגוי יש להדפיס הודעת שגיאה מתאימה ולסיים את התוכנית.במקרה של קלט תקין, עליכם להציג בנוסף גם את הסדרות שנקלטו (ראו דוגמאות הרצה).אשמח לקצת כיוונים ועצות, תודה מראש.
פורסם 2012 בדצמבר 112 שנים מחבר האם אתה מתכוון להגדרת הקובץ ופתיחתו? כן.לגבי קליטת השורה ממנו, אני יודע שאני יכול להשתמש בfscanf אבל האם ישנה דרך אחרת?ובעצם איך אני גורם לתכנית לעצור בנקודה?
פורסם 2012 בדצמבר 112 שנים אתה יכול לקרוא תו בודד גם באמצעות הפונקציה fgetc.ובשביל לקרוא עד הנקודה, בשביל זה יש while.
פורסם 2012 בדצמבר 112 שנים Google is your friend.https://www.google.co.il/search?q=fgetcכל פעם שתקרא לפונקציה היא תקרא תו בודד מהקובץ. תשתמש ב-while בשביל לקרוא הרבה תווים.
פורסם 2012 בדצמבר 412 שנים מחבר ראשית, האם ניתן לעשות "מקרה" של סוף הקובץ כפי שעשיתי פה? האם זה יעבוד? או שישנה דרך אחרת לעשות זאת? דבר נוסף, בתצורה הנוכחית שלה 0 הלולאה לא עובדת לי, הוא נכנס ללולאה פעם אחת אך לא נכנס אליה שוב. הוא אכן קולט את התו הראשון למערך מה שאומר שהוא לא שם ב"דגל" את הערך 1. תודה על הסבלנות txtFile = fopen ("textInput.txt", "r"); //open txt file if (txtFile != NULL) //check file exists { do { temp=fgetc(txtFile); switch(temp) { case '.': r++; break; case EOF: flag = 1; break; default: tav[r][c++]=temp; } } while(flag = 0); fclose(txtFile); //close txt file } else { printf("Error, file doesn't exist"); }
פורסם 2012 בדצמבר 412 שנים אל תשים את הקוד הציטוט, שים אותו בטג קוד. לשאלתך: קודם כל, עשית = במקום == בwhile. חוץ מזה, מה הטיפוס של temp?
פורסם 2012 בדצמבר 512 שנים הוא צריך להיות int, כי זה טיפוס ההחזרה של fgetc, והקבוע EOF הוא גם כן int.
פורסם 2012 בדצמבר 512 שנים מחבר אתה בטוח? דווקא נראה שזה עובד כמו שזה. השורה הראשונה נקלטת בלי בעיה. כשהוא מגיע לנקודה הוא עוצר, השאלה היא איך אני גורם לו לרדת שורה כדי לקרוא את השורה השניה?
פורסם 2012 בדצמבר 512 שנים כן, בטוח. זה יכול לעבוד כמו שזה, אבל לא כל קומפיילר בהכרח יפרש את הקוד הזה נכון.לרדת שורה = לקרוא עד סוף השורה. בדיוק כמו שגרמת לו לקרוא עד שהגעת לנקודה. תו ירידת שורה זה 'n\'.
פורסם 2012 בדצמבר 512 שנים מחבר הממ הסתדרתי עם ירידה השורה וקריאת השורה השניה, תודה!לגבי טיפוס המשתנה הזמני, שיניתי כפי שאמרת, חשבתי שזה ייצור לי בעיות אבל זה עבר חלק. while(flag == 0) { temp=fgetc(file); switch(temp) //what to do with char { case 10: // ignore /n char break; case '.': //end of LINE r++; c = 0; break; case EOF: //end of FILE flag = 1; break; default: //good digit/char if((temp > 47) && (temp < 58)) //check if digit { (r=0)?(flag=2):(flag=3); } if(biggest < temp) //biggest char (ascii value) { biggest = temp; } if (smallest > temp) //smallest char (ascii value) { smallest = temp; } tav[r][c++]=temp; counter[temp]+=1; } }אני לא מצליח לגרום לו לשמור את הערך הקטן ביותר, הוא תמיד שומר לי תו ריק (כנראה של ירידת השורה)
פורסם 2012 בדצמבר 512 שנים מי זה flag? אתה אכן לא בודק האם הגעת לתו ירידת השורה ולכן smallest מקבל את הערך שלו (שקטן מתווים אחרים).
פורסם 2012 בדצמבר 512 שנים מחבר flag זהו משתנה שמקבל ערכים בהתאם לשגיאות שאני צריך להציג.עליתי על הבעיה - הייתי צריך לאתחל את small למספר המקסימלי. כי כאשר הוא היה מאותחל ל0, הוא היה התו הקטן ביותר ובעצם הציג לי NULL.עכשיו הבעיה שלי הצגת התו הנפוץ ביותר (ובמידה וישנם כמה עם אותה שכיחות, עלי להדפיס את זה עם הערך הנמוך ביותר).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.