פורסם 2007 במרץ 518 שנים ב++C אני צריכה לקרוא שורות מסוימות מתוך קובץ לפי בקשת המשתמש.1. אם המשתמש לוחץ ENTER בCIN (כי הוא רוצה לקרוא מהשורה הראושנה עד האחרונה= לא מכניס קלט מספר) אז המחשב לא ממשיך הלאה בתכנית עד שהוא מכניס קלט. מה אפשר לעשות נגד זה???2. איך אני קוראת שורות מסוימות איך הפונקציה GETLINE עוזרת לי בזה?
פורסם 2007 במרץ 518 שנים GETLINE מאפשרת לך לקלוט עד תו מסויים. במקרה הזה את יכולה לקלוט עד \n(זה נמצא בפרמטר השלישי אם אני לא טועה, והוא אפילו הדיפולטי שלו).
פורסם 2007 במרץ 518 שנים מחבר אז אם אני רוצה לקרוא שורות מסוימות אני צריכה לספור N-1 פעמים \n ואז משם להתחיל לקרוא???ולגבי השאלה הראשונה?? מה עושים אם לפעמים זה שהמשתמש לא רוצה להכניס קלט זו מספק אותי (כי זה אומר שהוא רוצה להשתמש בברירת מחדל??)
פורסם 2007 במרץ 618 שנים מחבר תקראי כם עם GETLINE ותראי אם יש במחרוזת שלך רק \n.יכול להסביר שוב למה התכוונת?
פורסם 2007 במרץ 618 שנים #include <iostream>#include <fstream>using namespace std;int main(void){ int num; char str[101]; cout << "Enter a number (enter for everything):"; cin.getline(str, 100, '\n'); if (str[0]==0) num = -1; else num = atoi(str); cout << "You entered " << num << endl;}
פורסם 2007 במרץ 718 שנים מחבר הבנתי בערך מה עשית, אני צריכה לבחור בין שני קבצים ולקרוא מהם את המספר שורות הרצוי.זה מה שעשיתי: זה פרימיטיבי מדי????bool ReadTextFile(int choice, int lineBegin, int lineEnd){ int moneLine =0; char ch; if(choice==1) { ifstream file1("cscourse.txt"); cout<<endl; if(!file1.eof()) { while(!file1.eof()) { if(moneLine==lineBegin-1) { break; } file1.get(ch); if(ch=='\n') { moneLine++; } } while(!file1.eof()) { file1.get(ch); if(ch=='\n') { moneLine++; if(moneLine==lineEnd) { break; } } cout<<ch; } } } else { ifstream file2("ecocourse.txt"); if(!file2.eof()) { while(!file2.eof()) { if(moneLine==lineBegin-1) { break; } file2.get(ch); if(ch=='\n') { moneLine++; } } while(!file2.eof()) { file2.get(ch); if(ch=='\n') { moneLine++; if(moneLine==lineEnd) { break; } } cout<<ch; } } } return true;}וגם -איך אפשר שהמשתמש לא יכניס כלום (איזה שורות הוא רוצה לקרוא אם רוצה מהתחלה עד הסוף שילחץ ENTER )???
פורסם 2007 במרץ 718 שנים void ReadTextfile(char *filename, int begin, int end){ string input; ifstream file(filename); int line = 0; if (file.is_open()) { while (!file.eof()) { getline(file, input); line++; if ((begin == -1 || line >= begin) && (end == -1 || line <= end)) { cout << input << endl; } } } file.close();}לא הרצתי, צריך לבדוק.
פורסם 2007 במרץ 718 שנים #include <fstream.h>#include <stdlib.h>void ReadTextFile(int choice, int lineBegin, int lineEnd, bool readall){ int LineCounter =1; char buffer[256]; ifstream file; if(choice==1) file.open("cscourse.CPP"); else file.open("ecocourse.txt"); while(!file.eof()) { file.getline(buffer, 256, '\n'); if( readall || (lineBegin <=LineCounter && LineCounter <= lineEnd)) cout<<buffer<<endl; LineCounter++; } file.close();}void main(){ int lineBegin, lineEnd; char str[100]; char FileChoice[20]; cout<<"Enter 1 or 2 to select file"<<endl; cin.getline(FileChoice,20); cout << "\nEnter line to start reading from (enter for everything):"<<endl; cin.getline(str,100);// getline(cin,str);//, 100, '\n'); if (str[0]==0) //enter was pressed ReadTextFile(atoi(FileChoice), 0,0, true); else { lineBegin = atoi(str); cout << "Enter line to end reading:"; cin>>lineEnd; ReadTextFile(atoi(FileChoice), lineBegin, lineEnd, false); }}עובד (בדקתי).
פורסם 2007 במרץ 718 שנים מחבר זה לא ברור לי: cin.getline(FileChoice,20); if (str[0]==0) //enter was pressed ReadTextFile(atoi(FileChoice), 0,0, true); וגם if( readall || (lineBegin <=LineCounter && LineCounter <= lineEnd)) cout<<buffer<<endl; LineCounter++; תודה
פורסם 2007 במרץ 718 שנים 1) קולט מחרוזת באורך 20 עד \n.2) atoi - ascii to intהופך ממחרוזת למספר.3) בדיקה אם צריך להדפיס את השורה הנוכחית שנקראה מהקובץ.
פורסם 2007 במרץ 718 שנים אז ככה: 1) לגבי השורה (cin.getline(FileChoice,20 השתמשתי בפונ' getline כדי לקלוט את מספר הקובץ המבוקש(1 עבור cscourse.CPP ו -2 עבור ecocourse.txt). הערך 20 הוא ערך שרירותי שקבעתי שאומר שאורך מחרוזת הקלט מוגבל למספר באורך 20 ספרות(19 בפועל). בתכל'ס אפשר לשים 3 וזה מספיק(תו אחד עבור המספר, אחד עבור התו של שורה חדשה ועוד אחד עבור ה-null שיציין סוף מחרוזת). אם תשימי פחות מ-3, אז הפונ' getline השנייה לא תחכה לקלוט ממך כלום אלא תמשיך ישר כאילו הקלדת אנטר (ההסבר לכך בגדול הוא שלחיצת האנטר תחשב כקלט עבור str ולא עבור FileChoice). אפשר לפשט את זה ע"י השורה FileChoice= cin.get() שגם ממירה את התו למספר ומונעת את השימוש בפונ' atoi שמבצעת את אותו הדבר. 2)קטע הקוד השני בודק אם לחצת אנטר, אזי המחרוזת שהכנסת ריקה, כלומר התו הראשון בה שווה ל-null, ואז קוראים לפונקציה ReadTextFile עם הדגל שמסמן לקרוא את כל השורות(במקרה כזה הערכים של lineBegin ו- lineEnd לא משנים). 3)הקטע השלישי בודק האם בחרנו לקרוא את כל הקובץ, ואם כן אז לא משנה לנו הערך של LineCounter. אחרת אם בחרנו תחום מסויים של שורות לקריאה אז התנאי שיבדק הוא האם השורה שבה אנו נמצאים כעת, נמצאת באותו תחום שורות מבוקש, ואם כן אז מדפיסים את השורה למסך). זהו, מקווה שהצלחתי להסביר את עצמי טוב, ושיהיה בהצלחה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.