עבור לתוכן

C++ פקודת מחיקה?

Featured Replies

פורסם

יש איזו פקודה שעושה את הפעולה ההפוכה מCOUT אוPRINTF ומוחקת משהו שנרשם מקודם בעזרת אחת מהפקודות האלו?

(עדיף שהיא תהיה בספריית STDIO.H)

עריכה- אוקיי עכשיו מצאתי שיש את האופרטור delete שיכול למחוק פוינטרים.

אז כדי למחוק תו (למשל A) אני עושה משהו כזה?

char letter='a';
char *ptr;
ptr=&letter;
printf("%c",letter);
delete letter;

זה נכון?

פורסם

ממש לא.. אתה עושה פה ערבוב של נושאים לא קשורים...

דבר ראשון אם אתה משתמש ב C++ אז אין צורך להשתמש ב printf וכו'..

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

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

אם אתה רוצה להתעסק באופן מתקדם עם הפלט למסך (למחוק דברים ספציפים וכו'), ממה שאני יודע אין משהו ספציפי כללי ב C++ שנותן לך את זה, ואתה צריך להשתמש בספריות ספציפיות לכל סביבת עבודה (NCURSES ב LINUX, ב VISUAL C יש את CONSOLE וכו'), ככה ששם אתה יכול ללכת למיקום X, Y כלשהו על המסך ולכתוב מחדש שוב דברים.

למשל ב VISUAL C++ עם שימוש ב CONSOLE, אתה יכול לראות את המיקום הנוכחי, ואז לחזור אחורה לפי מה שהודפס ולהדפיס שוב משהו אחר:

void gotoxy(int x, int y)
{
HANDLE hConsoleOutput;
COORD dwCursorPosition;
cout.flush();
dwCursorPosition.X = x;
dwCursorPosition.Y = y;
hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsoleOutput,dwCursorPosition);
}

פורסם

יש איזו פקודה שעושה את הפעולה ההפוכה מCOUT אוPRINTF ומוחקת משהו שנרשם מקודם בעזרת אחת מהפקודות האלו?

(עדיף שהיא תהיה בספריית STDIO.H)

עריכה- אוקיי עכשיו מצאתי שיש את האופרטור delete שיכול למחוק פוינטרים.

אז כדי למחוק תו (למשל A) אני עושה משהו כזה?

char letter='a';
char *ptr;
ptr=&letter;
printf("%c",letter);
delete letter;

זה נכון?

אני מתגעגע לזמן שחשבתי ככה...

פורסם

Icebreak - למה להסתבך?

אפשר לעשות

cout << '\b';

או לחילופין

printf('\b');

זה מדפיס את התו המיוחד שמייצג backspace, כלומר מחיקת תו אחד.

או לחילופין להשתמש ב-r\ שמוחק את כל השורה.

פורסם

כי לא בטוח שהוא רוצה למחוק מה שהוא רשם כרגע.

יכול להיות שהוא רוצה למחוק שורות שהוא כתב לפני פעמיים \n למשל.

פורסם
  • מחבר

תודה שניצל לא חשבתי על זה ;)

במקרה הזה זה דווקא כן מתאים לי...

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

פורסם

הדרך הכי טובה זה פשוט להיכנס לכתובת הפיסית של מסך מספר 0 (יש כמה מסכים.... בשביל עדכון מהיר...), זה יוצא בערך בכתובת 0B200h, אם אני לא טועה, אבל אל תתפוס אותי במילה....

בכל מקרה, שם אתה הולך לתא שמאכסן את המידע שאתה רודה למחוק, ובאיזור הASCII אתה שם לו את הערך האסקי של רווח (27H נדמה לי...)

למדתי על זה בשעור מערכות הפעלה........ דברים מגניבים אפשר לעשות עם זה...........

פורסם

אם אני לא טועה, (ואני די משוכנע שלא) מערכת ההפעלה לא נותנת גישה ישירה למסך. בדיוק בגלל זה יש דבר כזה שנקרא system calls (בווינדוס int 21h ובלינוקס int 80h).

אם יש דרך אחרת.... אני אשמח לשמוע על כך.

מטי.

פורסם

שום מערכת הפעלה מודרנית (שמשתמשת ב- protected mode) לא נותנת לתוכניות לגשת לזיכרון הפיזי.

מערכת ההפעלה האחרונה שבה אולי היה אפשר לעשות את זה היא windows98 (וגם אז, רק ב- dos-mode)

ארכיון

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

דיונים חדשים