שיחה:שפת C/שלום עולם

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
קפיצה לניווט קפיצה לחיפוש

מה הולך עם ה_getch הזה?[עריכה]

מדי פעם מישהו בא, משנה את getch ל_getch, ואז מישהו מבטל את השינוי. יהיה נחמד אם הבא שחושב שזה אמור להיות _getch יסביר בדף השיחה למה, ונוכל אולי להפסיק עם הפינג פונג הזה. תודה. Thedsadude 18:13, 27 בפברואר 2008 (IST)

עקרונית מי שעושה את זה הוא צודק. לפחות לפי הידוע לי Microsoft מקדמת באמצעות קו תחתון את כל הפונקציות שלא מהתקן, אם הן הרחבה שלו. ב-Visual Studio 2005 (לא יודע על סביבות פיתוח אחרות לא מבית מיקרוסופט) הם הוסיפו Warnings על פונקציות שהן "Deprecated", ו-getch() (ללא הקו התחתון) היא אחת מהן. אצלי הוא נותן את ההודעה:

d:\***\programs\test02\test02\main.cpp(57) : warning C4996: 'getch' was declared deprecated
c:\program files\microsoft visual studio 8\vc\include\conio.h(145) : see declaration of 'getch'
Message: 'The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.'

לכן אם אתה רוצה לקמפל ללא שום הודעות אתה צריך לשנות את זה לקו תחתון או להגדיר את המאקרו ‎_CRT_NONSTDC_NO_DEPRECATE א. ybungalobill 20:17, 27 בפברואר 2008 (IST)
יופי, תודה. אז אני משנה את זה ל_getch. ביי. Thedsadude 00:57, 28 בפברואר 2008 (IST)
עוד משהוא יחודי לסביבת פיתוח שלהם, אבל נו היא די נפוצה. אליהו52ק 07:45, 28 בפברואר 2008 (IST)
שלום אליהו52ק. גם אתה עובד בחלונות, לא? איך זה עובד אצלך - getch או _getch? נדמה לי שאתה עובד בלי Visual C++.
Thedsadude 11:54, 28 בפברואר 2008 (IST)
עבדתי בחלונות, כבר כמה חודשים שאני עובד בלינוקס ומרוצה עד הגג (חלונות הפסיק לפעול ואין לי תמריץ לתקן זאת), כך שאני לא יכול לנסות _getch, אבל כל זמן שעבדתי בסביבת פיתוח Dev C++ השתמשתי בgetch. אליהו52ק 13:10, 28 בפברואר 2008 (IST)
אוקיי, תודה. Thedsadude 13:23, 28 בפברואר 2008 (IST)

K&R[עריכה]

הייתי נצמד במדריך הזה לסטנדרטי הכתיבה מK&R. (מתייחס בעיקר להורדת שורה של הסוגריים, שגוזלת למעשה שורת קוד מיותרת משטח המסך של המתכנת)

--the_duke 03:04, 12 אוק' 2004 (UTC)

מה הם הסטנדרטים האלה? לא שמעתי עליהם. --הדוקטור המשוגע (שיחה) 13:55, 12 אוק' 2004 (UTC)

מיספור שורות הקוד[עריכה]

אולי לצורך קלות הקריאה כדאי למספר את השורות בקטע הקוד כדי שישה יותר קל להתיחס אליהן בהסברים שבהמשך

מכיוון שהן כבר מצוטטות בגוף ההסברים (וכך צריך להיות) אין צורך של ממש גם למספר אותן. גדי אלכסנדרוביץ' 06:00, 7 נובמבר 2005 (UTC)

מדריך לא מובן[עריכה]

בתור קורא מתחיל המדריך כלל לא מובן, והמבוא מתחיל כבר במושגים, למרות שיש לי ידע קצר ב Visual Basic. ומה זאת אומרת "התוכנית שמשמשת אותך"? איזה תוכניות נפוצות? מומלצות? ... צריך לפרט יותר בפרק הזה ובמדריך בכלל........

מה זאת אומרת איזו תוכניות נפוצות? אתה בטוח שאתה מדבר על הפרק: "שלום עולם!"? חורחה

כן, גם אני בתור מתחיל בלי מושג לפני כן - אני בקושי מצליח להבין, בטח שלכותבים זה יהיה מובן כי הם למדו את זה... ואם כבר באים לתרום ספר לקהילת הגולשים אז אני חושב שיש לעמוד ביתר פירוט עוד מהסבר על התוכנה/סביבת עבודה שעובדים איתה לפני ה"שלום עולם". 109.160.166.213 19:25, 5 בפברואר 2012 (IST)

שלום, נראה לי שיהיה יותר קונסטרוקטיבי אם תסביר היכן אתה מתקשה, ואז (אולי) יוכלו לעזור לך. Atavory - שיחה 19:30, 5 בפברואר 2012 (IST)

אבל איך מריצים את זה?[עריכה]

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

Thedsadude 21:19, 22 בנובמבר 2007 (IST)

נעלם הקישור לתרגיל[עריכה]

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

Thedsadude 08:05, 23 בנובמבר 2007 (IST)


שלום לך. הדרך הנכונה להשתמש בתבנית בסוף כל דף היא ללא המחרוזת "=כן". שנה זאת, והכל יהיה בסדר, כפי שעשיתי אני בערך הזה. בברכה, Mintz l 01:33, 24 בנובמבר 2007 (IST)
שלום גם לך! תודה על התשובה! Thedsadude 12:10, 25 בנובמבר 2007 (IST)

בעיה בהרצה[עריכה]

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

(אמנם אני מכיר פתרון בדוגמת שימוש בספריית <conio.h> ו getch אך אם יש פתרון יותר טוב אז עדיף).

אליהו52ק 21:14, 5 בדצמבר 2007 (IST)

הנה אנו נפגשים שוב :-)
שמע, בוא ננסה לכתוב את הפתרון ביחד. העניין הוא כזה. אתה כנראה משתמש בסביבת פיתוח (אני צודק?), וכשאתה מריץ את התוכנית, היא פותחת חלון, מדפיסה משהו, ומיד נסגרת (אא"כ אתה משתמש בהאק הgetch). אבל אין סיבה שתריץ דברים מסביבת הפיתוח, גם אם אתה משתמש בה כדי לערוך ולבנות את התוכנית. אתה יכול לפתוח "חלון פקודות" (או איך שזה נקרא בחלונות - שכחתי), וגם את סביבת הפיתוח. כשאתה בונה בסביבת הפיתוח שלך, יופיע קובץ עם סיומת exe, נגיד foo.exe (מן הסתם זה נקבע על ידי שם הפרוייקט, או משהו כזה). אם בחלון הפקודות תכתוב foo.exe, אז התכנית תרוץ בלי לסגור את החלון, ולא תצטרך את ההאק. אגב, אם זה נשמע לך מופרך - יש המון אנשים שעובדים מחוץ לסביבת פיתוח, באופן די דומה למה שכתבתי כאן (כולל הח"מ).
עכשיו נשאר למלא את הפרטים. אני אשמח לעזור, אבל לא יכול לעשות את זה בשבילך. בדף המאמר, צור נושא אחרי gcc בלינוקס וcygwin, ותן לו את שם הסביבה שלך (נניח visual studio 2005 בחלונות, או מה שזה לא יהיה). נסה למלא כמה שיותר פרטים בעצמך, וכתוב כאן את מה שאינך מצליח. אחרי עוד שיחה או שתיים אני סמוך ובטוח שנצליח לסגור את הנקודה.
חוצמזה, נראה לי שכדאי שתציין בפעם הבאה דברים רלוונטיים, כמו מה סביבת הפיתוח שלך.
אגב, אם יש כאן מישהו בעל נסיון שעובד בחלונות או בסביבת הפיתוח שלו - נא לקפוץ לשיחה!
Thedsadude 02:11, 6 בדצמבר 2007 (IST)
נסיתי להריץ גם את קובץ הexe ישירות (ולא דרך הסביבת פיתוח) והוא נסגר מידית. יכול להיות שהבעיה תיפתר אם אריץ אותה בשורת פקודה, אך בין כך אני צריך ללמוד כיצד לבנות ישומים שאפשר להריצם מסביבה גרפית (שרבים מן האנשים עובדים איתה).
סביבת הפיתוח שלי הי DEY C ++ אך כפי שציינתי נסיתי להריץ ישירות מן קובץ הexe שהתוכנה יצרה.
אליהו52ק 10:38, 6 בדצמבר 2007 (IST)
שלום שוב,
זו בדיוק הנקודה - אין שום קשר בין סביבת העבודה בה אתה בונה את היישום, לבין הרצת התוכנית מחלון הפקודות. אם תפתח חלון פקודות, וכל פעם שיש לך תוכנית תריץ אותה שם, החלון לא ייסגר, גם בלי ההאק של הgetch. נראה לי נחמד שתוסיף הסבר איך עושים זאת במאמר (אם תרצה, נעשה זאת ביחד).
Thedsadude 10:53, 6 בדצמבר 2007 (IST)
קראתי גם את מה שרשמת בדף שיחתו של Thedsadude. אם ברצונך לקבל פתרון תקני לגמרי, לא תקבל כי אין כזה. שפת C, כמו גם C++, לא מחייבת שאמצעי הקלט יהיה דווקא "מקלדת". למשל את כל התוכנות התקניות בC תוכל להריץ במערכת לעיוורים שהקלט מתבצע באמצעות דיבור למיקרופון והפלט דרך רמקול, לכן אין פה שום משמעות ל-"לחיצת מקש". אם תריץ את התוכנית שלך משורת פקודה כך:
cat aaa.txt | my.exe
אז כל הקלט (דרך scanf למשל) יתבצע מתוך קובץ.
כל עוד אתה נמצא בשלבי פיתוח זה לגיטימי לגמרי להשתמש ב-getch()‎. כמו כן זה לא נוח להריץ את התוכנה משורת פקודה כל פעם וזה גם לא הפיתרון אם בא לך להשתמש במנפה שגיאות. לכן כל מה שאני יכול להציע זה:
  • שים break point לפני היציאה מה-main ואז תריץ.
  • תשתמש בפונקציה הזאת שהיא מניחה התנהגות לא תקנית של fflush ושהקלט הוא אכן דרך מיקלדת. זה לא יותר טוב מ-getch:
void waitForKeyPress()
{
	fputs("Press ENTER to continue...", stdout);
	fflush(stdin);
	fgetc(stdin);
	fflush(stdin);
}
  • תשתמש בשיטה הישנה :).
ybungalobill 10:57, 6 בדצמבר 2007 (IST)

אם הבנתי נכון בשלבי הפיתוח אפשר להשתמש בgetch (נוסיף את זה לערך תחת "איך להריץ את זה"), אך ב"סוף" צריך עדיין איך שהוא שלמשתמש (שלא יריץ דרך שורת פקודה) התוכנית לא תסתיים, כגון שלפני סיומה היא תצטרך לקבל מן המשתמש פקודה כזו?

אליהו52ק 14:03, 6 בדצמבר 2007 (IST)

לא מצליח לי[עריכה]

הי אני איתי ואני התחלתי ללמוד C מכאן.עכשיו אני נתקעתי בחלק שם שלום עולם.עשיתי מה שצריך הורדתי GCC כי לא היה לי אז ניסיתי לעבוד,העתקתי בול! אות לאות שמרתי ונכנסתי למסוף והעתקתי מה שכתוב ואז זה אומר לי שאין קובץ כזה אח שלי פירש לי 

לאן נכנסת? מי אומר שאין קובץ? ואיזה קובץ בדיוק אין? ומה בדיוק עשית שזה גרם להודעה הזאת? ומה בדיוק ההודעה? 93.173.163.64 17:59, 10 בפברואר 2010 (IST)

עזרה[עריכה]

לא הבנתי את המשפט הזה:"לאחר שכתבת את הקוד, בנה את הקוד לתכנית, והרץ את התוכנית. בניית הקוד והרצת התכנית משתנים בהתאם למערכת ההפעלה." מישהו יכול להסביר לי?

נראה שבתחילה את/ה יוצר/ת "תוכנית" (כמו משחק) ולאחר מכן אתה מריץ אותו. בחלק הראשון של ההסבר מתואר כיצד לרשום את הקוד תחת הכותרת : הסבר על הקוד. לאחר מכן, יש הסברים להרצתו (להפעילו) לפי התוכנה בה אתה משתמש : gcc בלינוקס או Cygwin, סביבת פיתוח בחלונות... בהצלחה, --‏Illuyanka‏ 09:30, 15 ביולי 2010 (IDT)

אבל איך מריצים??[עריכה]

הורדתי ++dev-c ואני לא מבין. גם אני נתקעתי בפרק שלום עולם. העתקתי הכל, אבל איך לגרום לתוכנה להריץ?? (הגרסה של התכנית:4.9.9.2)

בתוכנה dev-c++ צריכה להיות לך אפשרות "לבנות" את התוכנית (נקרא build באנגלית.) אפשרות זו תיצור קובץ exe שאותו אתה יכול להריץ. צריכה להיות גם אפשרות של "הרצה" (באנגלית run) שישירות תריץ את הקוד שרשמת.
שים לב - הבניה/הרצה תצליח רק אם התוכנית שלך כתובה נכון. אם יש שגיאה כלשהי (למשל - חסר סימן "נקודה פסיק" היכןשהו) - בניית קובת הexe תכשל ותקבל הודעת שגיאה. ‏gran‏ - שיחה 21:11, 16 באפריל 2011 (IDT)

זה אני, מי שכתב את :אבל איך מריצים??"[עריכה]

הורדתי גם את :"pelles C for windows" אז אני רוצה המלצה איזה טוב יותר וגם איך להשתמש(לגבי השאלה הקודמת)

getchar()[עריכה]

החלפתי את הפונקציה getch() בפונקציה getchar(), כיוון שזו האחרונה נמצאת בספריה התקנית של C. היא מוכללת בקובץ stdio.h. הרבה יותר נח ושימושי. יוסף אורשיחה • כ"ד בסיוון ה'תשע"ב • 21:58, 14 ביוני 2012 (IDT)

בעייה בתכנות[עריכה]

שלום, אני התחלתי לתחנת בשפת c בעזרת המדריך הזה אך כבר בשורת הקוד של hello world נתקלתי בבעיה שהקובץ נסגר רגע לאחר שהוא נפתח, על אף שהעתקתי את מה שהיה כתוב במדריך לגבי זה וגם ניסיתי לכתוב עצמי ליתר ביטחון. אשמח אם מישהוא יוכל להסביר על שיטות פעולה נוספות במקרה כזה. נ"ב אם זה משנה משהו אז אני עובד ב ++dev c -- הודעה זו נכתבה על־ידי אנונימי/ת.

תקשיב, אתה צריך לפני ה-return 0; להוסיף getchar(); או getch();, עדיף getchar אבל אם לא עובד, תנסה את השני. הכל ביחד יוצא:

#include <stdio.h>

int main()
{
    printf("Hello world\n");
    getchar();
    return 0;
}

או:

#include <stdio.h>

int main()
{
    printf("Hello world\n");
    getch();
    return 0;
}

תוסיף את זה תמיד. מקווה שעזרתי,

NVileos - שיחה 20:15, 2 במרץ 2014 (IST)