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

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

הודעה פורסם: 20/05/2015 - 09:49
נושא ההודעה: שפת C | מחפש תחליף ל-conio.h בלינוקס

אני הבנתי ש-conio.h היא ספרייה של DOS ולכן היא אינה קיימת בלינוקס. אך לצערי לא הצלחתי להפעיל משהו אחר במקומה. בחיפוש קצר בברווז מצאתי את הספריות: curses/ncurses. אך גם הם לא "נמצאו" במהדר. וזה למרות שמחיפוש קצר במנהל החבילות העלה שהן מותקנות (אבל יכול להיות שחסר משהו).
אני די מתחיל וזה הקוד שקיבלתי בספר ואני צריך עזרה כדי להסב אותו למשהו תקין ועובד תחת לינוקס.

קוד:
#include <stdio.h>
#include <conio.h>
#include <dos.h>

int main(int argc, char **argv)
{
   int i;
   clrscr();
   for(i=1;i<=80;i++){
      gotoxy(i,1);
      putchar('*');
      gotoxy(i,20);
      putchar('*');
   }
   for(i=2;i<20;i++){
      gotoxy(1,i);
      putchar('*');
      gotoxy(80,i);
      putchar('*');
   }
   for(i=70;i>5;i--){
      gotoxy(i,10);
      printf("Hello ");
      delay(30);
   }
   
   return 0;
}


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

הודעה פורסם: 20/05/2015 - 10:15
נושא ההודעה:

delay: יש לך sleep.

באופן כללי: שימוש ב־ncurses. ר' לדוגמה:
http://stackoverflow.com/questions/7170021/how-could-i-achieve-gotoxy-in-gcc
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 20/05/2015 - 14:49
נושא ההודעה:

לא מה ששאלת אבל פתרון טוב יותר:
תלמד מספר נורמלי, לדוגמה K&R The C Programming Language
או משהו כזה, ולא מספר שמלמד אותך על דוס...
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
יגלאורח · ·
 

הודעה פורסם: 20/05/2015 - 17:39
נושא ההודעה:

Anonymous :
לא מה ששאלת אבל פתרון טוב יותר:
תלמד מספר נורמלי, לדוגמה K&R The C Programming Language
או משהו כזה, ולא מספר שמלמד אותך על דוס...

הוא לומד מהספר "ללמוד C" שבאופן כללי הוא ספר מעולה, חוץ מהספריה הזאת, אבל זה בקטנה, בייחוד שהספר בעברית וזה לא מובן מאליו.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
oz_nahumלא בפורום כעת ת.הצטרפות: 03/09/2005 · הודעות: 1084 ·
 

הודעה פורסם: 20/05/2015 - 22:04
נושא ההודעה:

Anonymous :
לא מה ששאלת אבל פתרון טוב יותר:
תלמד מספר נורמלי, לדוגמה K&R The C Programming Language
או משהו כזה, ולא מספר שמלמד אותך על דוס...



Mad Mad Mad Mad Shocked Shocked Shocked Shocked

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

הודעה פורסם: 21/05/2015 - 11:16
נושא ההודעה:

לכל המתעניינים, כן אני לומד מהספר בעברית של הוד עמי (מהדורה 3), וזה לא פעם ראשונה שאני נתקל "בחומר" שקיים רק בחלונות. בד"כ אני מוצא פתרון במקרה הזה דרוש קצת יותר ידע בשפת C תקנית. למרות הפתרונות שמצאתי וקיבלתי הקוד מסרב לעבוד. אני אחזור לזה בהמשך מה גם שזה לא כל-כך חשוב לדעתי לפחות.
ולמי שיכול לעזור לי זה הקוד שיצא לי (לא לצחוק... ניסיתי לגבש קוד ראוי מרחבי הברווז זה מה יצא Wink )
קוד:
#include <stdio.h>
#include <curses.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
   int i;
   system("clear");
   for(i=1;i<=80;i++){
      move(i,1);
      putchar('*');
      move(i,20);
      putchar('*');
   }
   for(i=2;i<20;i++){
      move(1,i);
      putchar('*');
      move(80,i);
      putchar('*');
   }
   for(i=70;i>5;i--){
      move(i,10);
      printf("Hello ");
      sleep(30);
   }
   
   return 0;
}
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
mksoftלא בפורום כעתSite Admin ת.הצטרפות: 17/03/2002 · הודעות: 10514 · מיקום: כדור הארץ
 

הודעה פורסם: 21/05/2015 - 12:11
נושא ההודעה:

ראשית, כדאי לך לקרוא ל-initscr כשמתחילים לעבוד עם curses.

לאחר מכן אין צורך להריץ פקודת clear, זה מאוד "יקר". אתה יכול פשוט לקרוא ל-clear של curses עצמו (ולאחר מכן refresh).

_________________
הבלוג שלי
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית שלח דוא\ ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 21/05/2015 - 12:57
נושא ההודעה:

על איזו הפצה אתה עובד?
ב-Debian, Ubuntu ושאר המשפחה הזו, קבצי הכותר (h) של הספריות והתיעוד שלהן מופרדות מחבילה המכילה את הבינארי (so) של הספרייה עצמה, כך שאם אתה רוצה לקמפל יישום שמשתמש בספרייה מסוימת, עליך להתקין את חבילת הפיתוח שלה, שבד"כ נקראת כמו החבילה המקורית בתוספת dev-

ספציפית לגבי ncurses אתה צריך את libncurses5-dev זאת כאמור על מערכת מבוססת Debian.
אני אל בטוח מה שיטת השמות הנהוגה בהפצות RPM ואחרות.

--לב
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
kzamirלא בפורום כעת ת.הצטרפות: 25/12/2004 · הודעות: 76 ·
 

הודעה פורסם: 21/05/2015 - 14:32
נושא ההודעה:

ראיתי שהשואל הראשון פתר בעצמו את השאלה בעזרת curses. לדעתי זה באמת הפיתרון היותר טוב. אני מביא פה גם פתרון ללא ספריה חיצונית, המבוסס על תקן ecma. הפתרון הזה יעבוד רק במסופים שמקיימים את התקן, אבל רוב המסופים בלינוקס מקיימים את התקן. כדי לבצע פעולה במסוף ( ניקוי, הזזת סמן ... ) שולחים תו esc ואח"כ את הפקודה.
קוד:
#include <stdio.h>

/* ECMA-48 Control Sequence Introducer - ESC[ */
#define CSI "\033["

/* 2J - clear the screen */
void clrscr() {
  printf("%s2J", CSI);
}

/* (row);(col)H - move cursor */
void gotoxy(int x, int y) {
  printf("%s%d;%dH", CSI, y, x);
}

int main(int argc, char* argv[])
{
  clrscr();
  gotoxy(10,2);
 
  printf("hello world\n");
  return 0;
}

על התקן והפקודות בויקיפדיה:
http://en.wikipedia.org/wiki/ANSI_escape_code
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
elcucoלא בפורום כעת ת.הצטרפות: 14/10/2003 · הודעות: 6255 ·
 

הודעה פורסם: 22/05/2015 - 11:25
נושא ההודעה:

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

#include <stdio.h>
#include <stdlib.h>

#ifdef _WIN32
#include <curses.h>
#include <unistd.h>

#elif __linux__

/* ECMA-48 Control Sequence Introducer - ESC[ */
#define CSI "\033["

/* 2J - clear the screen */
void clrscr() {
  printf("%s2J", CSI);
}

/* (row);(col)H - move cursor */
void gotoxy(int x, int y) {
  printf("%s%d;%dH", CSI, y, x);
}
#endif

int main(int argc, char **argv)
{
   int i;
   clrscr();

   for(i=1;i<=80;i++){
      gotoxy(i,1);
      putchar('*');
      gotoxy(i,20);
      putchar('*');
   }

   for(i=2;i<20;i++){
      gotoxy(1,i);
      putchar('*');
      gotoxy(80,i);
      putchar('*');
   }

   for(i=70;i>5;i--){
      gotoxy(i,10);
      printf("Hello ");
      sleep(30);
   }
 
   return 0;
}
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 22/05/2015 - 13:17
נושא ההודעה:

oz_nahum :


Mad Mad Mad Mad Shocked Shocked Shocked Shocked

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


אתה יכול לציין שלושה דברים שהשתמשת בהם ב-C בשנה האחרונה ושלא קיימים ב-K&R?

ההבדלים בין התקנים האחרונים לבין ANSI C הם קטנים מאוד. יכולת להגדיר משתנים באמצע בלוק, מערכים בגודל משתנה, איתחול של structs על פי שם. לא עולה בדעתי עוד דברים. כל השפה עצמה מתפקדת בדיוק כמו ש-K&R (המהדורה השניה, כמובן) מגדיר. את ההבדלים האלו אתה משלים בחמש דקות.

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

הודעה פורסם: 22/05/2015 - 14:50
נושא ההודעה:

Anonymous :
oz_nahum :


Mad Mad Mad Mad Shocked Shocked Shocked Shocked

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


אתה יכול לציין שלושה דברים שהשתמשת בהם ב-C בשנה האחרונה ושלא קיימים ב-K&R?

ההבדלים בין התקנים האחרונים לבין ANSI C הם קטנים מאוד. יכולת להגדיר משתנים באמצע בלוק, מערכים בגודל משתנה, איתחול של structs על פי שם. לא עולה בדעתי עוד דברים. כל השפה עצמה מתפקדת בדיוק כמו ש-K&R (המהדורה השניה, כמובן) מגדיר. את ההבדלים האלו אתה משלים בחמש דקות.

שחר


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

תוכן הדיון

  1. אורח
  2. אורח [צפריר]
  3. אורח
  4. אורח [יגל]
  5. oz_nahum
  6. אורח
  7. mksoft
  8. אורח
  9. kzamir
  10. elcuco
  11. אורח
  12. אורח