ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
אורח · ·
 

הודעה פורסם: 20/11/2014 - 18:42
נושא ההודעה: שפת C | מחפש פקודה מקבילה ל-flushall

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

הקוד:
קוד:
#include <stdio.h>
void main()
{
   char ch,let;
   ch = getchar();
   let = getchar();
        flushall();
   putchar(let);
   putchar(ch);
}


השגיאה:
קוד:
/tmp/ccXyzWvM.o: In function `main':
getchar.c:(.text+0x1e): undefined reference to `flushall'
collect2: error: ld returned 1 exit status
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 20/11/2014 - 19:14
נושא ההודעה:

תנסה
קוד:

_flushall

או
קוד:

fflush
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 20/11/2014 - 20:20
נושא ההודעה:

ב-gcc
כותבים במקום
קוד:
flushall()

את הקריאה
קוד:
fflush(NULL)
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 21/11/2014 - 09:21
נושא ההודעה:

את הפקודה 'fflush(NULL)' המהדר מקבל אך בכל זאת הקוד לא רץ כמו שצריך. הקוד רץ אותו דבר כמו בלי הפקודה הזאת בכלל.

מה שקורה זה שבריצה הוא מציג את:
קוד:
   ch = getchar();


אני מזין תו מקיש Enter והקוד מיד קופץ ל:
קוד:
putchar(ch);


ובזה מסתיים זמן הריצה.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 21/11/2014 - 09:48
נושא ההודעה:

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

הודעה פורסם: 21/11/2014 - 10:15
נושא ההודעה:

Anonymous :
אנטר הוא גם תו, ולכן ה-getchar השני לוקח אותו.
נסה למשל להקליד שני תווים, ואז אנטר.

צודק! תודה על העזרה חבר'ה.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 23/11/2014 - 13:13
נושא ההודעה:

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

הודעה פורסם: 24/11/2014 - 13:08
נושא ההודעה:

אורח חבוב, אולי אתה זה שמתבלבל או סתם מתחשק לך להטיף או אפילו "להפגין ידע לא רלוונטי" אבל הוא ביקש אלטרנטיבה לפקודה הנ"ל וזה בפירוש fflush.
זו פקודה סטדנרטית ב- C89 וגם ב- POSIX. מעבר לזה זו הטפה בגרוש. תחסוך את זה מאיתנו.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 24/11/2014 - 13:19
נושא ההודעה:

Anonymous :
אורח חבוב, אולי אתה זה שמתבלבל או סתם מתחשק לך להטיף או אפילו "להפגין ידע לא רלוונטי" אבל הוא ביקש אלטרנטיבה לפקודה הנ"ל וזה בפירוש fflush.
זו פקודה סטדנרטית ב- C89 וגם ב- POSIX. מעבר לזה זו הטפה בגרוש. תחסוך את זה מאיתנו.

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

הודעה פורסם: 24/11/2014 - 16:13
נושא ההודעה:

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

האם יש פונקציות מקבילות בתקנים ב gcc על תקן של c99\C++98 או אולי c11 או C++11 \ C++14
האם יש פוקנציות מקבילות אולי במהדר gcc

האם יש קומפיילר חלופי עם פונקציות מקבילות ? אולי llvm ?

אני לומד C
קוד:

scanf_s
strncat_s
strncpy_s
strnlen_s




שאלה משנית :
לגבי tokinize של string's , מה הדרך העדיפה לביצוע ? באמצעות לולאות או באמצעות pointers? , יש חלופה טובה לכך ?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 27/11/2014 - 09:32
נושא ההודעה:

באפשרותך לממש התנהגות מקבילה flushall בצורה הבאה:
קוד:
void clean_stdin()
{
        while(getchar() != '\n');
}


שים לב, שיש שוני מסוים בהתנהגות בין לינוקס עם GCC לווינדוס עם ויסואל סטודיו בהשארת תו האנטר לאחר gets וscanf.
עם GCC תצטרך לשים את הפונקציה רק לאחר קריאות לscanf, עם ויזואל סטודיו תצטרך לקרוא לפונקציה גם לאחר gets.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
borsoodלא בפורום כעת ת.הצטרפות: 05/01/2007 · הודעות: 306 ·
 

הודעה פורסם: 28/11/2014 - 07:31
נושא ההודעה:

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

האם יש פונקציות מקבילות בתקנים ב gcc על תקן של c99\C++98 או אולי c11 או C++11 \ C++14

ב C++ התקן של std מגדיר את std::flush על ostream
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. אורח
  2. אורח
  3. אורח
  4. אורח
  5. אורח
  6. אורח
  7. אורח
  8. אורח
  9. אורח
  10. אורח
  11. אורח
  12. borsood