צפיה בנושא - IDE טוב בשביל C :: Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית
IDE טוב בשביל C
יהודה‏ אורח · ·
פורסם: 13/06/2018 - 21:20
נושא ההודעה: IDE טוב בשביל C
אני לומד את C , ממש בהתחלה , עובר על הסינטקס הבסיסי ועובד עדיין עם המסוף .
NETBEANS תמיד היה לי הכי נוח , רק חבל שיש לי עכשיו בעיה קצת מוזרה איתו .
למשל קוד כזה .
printf("You are not eligible to vote!\n");
printf("Enter you age:\n");
printf("You are eligible to vote!\n");
אמור היה על ההתחלה להציג "הכנס את גילך " ומשום מה לא מציג אותו .
בעיה נוספת SCANF עד כמה שידוע לי קולט מחרוזת עד ENTER
ורק אחרי שאני לוחץ כמה פעמים על אנטר הוא סוף סוף ממשיך בקוד .
יש למישהו מושג מה יכולה להיות הבעיה ?
פורסם: 14/06/2018 - 08:24
זה כי goto גרם למערכת שלך להתאבד.
פורסם: 14/06/2018 - 10:09
goto היא הוראה ראויה ושימושית, רוב המשמיצים לא פגשו את הבעיות האמיתיות שלה אלא חוזרים באופן דתי על מה ששמעו. המאמר שכותרתו המקורית "A case against the goto statement" (ששונה ע"י עורך הג'ורנל לכותרת הקליק-בייט "goto considered harmful") דיבר על עולם אחר, שבו goto היא הצורה העיקרית לנהל זרימה של תוכנית, וברוב השפות, לא הייתה דרך לייצר בלוקים (ובקושי פונקציות).
בקרנל לינוקס, לדוגמא, יש כמה מאות שימושים ב- goto, ורובם מפשטים ומקצרים את הקוד משמעותית ביחס לאלטרנטיבה.
ולשאלתו של הפונה: יתכן שזה בגלל buffering שעושה netbeans, איני יודע. האם אותו הדבר קורה כאשר אתה מריץ את אותה פקודה מהטרמינל? (ללא redirection כמובן, כלומר, ללא שימוש בהוראות < | > וחברותיהן)
אם אתה מחפש IDE טוב ל- C, שווה לנסות את Visual Studio Code, למרות שהוא נכתב ע"י חברה עם אתיקה מפוקפקת ועבר פלילי - הוא בקוד פתוח לחלוטין, ועובד מצוין; באובונטו ניתן להתקין אותו בקלות ע"י umake. מומלץ מאוד לכבות telemetry אחרי שמתקינים אותו.
פורסם: 14/06/2018 - 14:16
חיבור שלו אל מערכת cmake לא טריויאלי. קראתי וקראתי, ולא הצלחתי ליישם.
מצד שני - אני יכול להמליץ על QtCreator.
פורסם: 14/06/2018 - 15:43
נושא ההודעה: Re: IDE טוב בשביל C
אמור זה שם של דג!
אני לא יודע למה אף אחד בשרשור עדיין לא אמר לך את זה, אבל הסיבה שיש לך בעיה עם הקוד היא שכתבת קוד לא נכון. נקודה.
לא משנה איזה IDE תפתח, התוצאה תהיה זהה.
אתה רשמת את שורת ההדפסה:
לפני הכל! לפני כל יתר הקוד שלך!
אז וודאי שהיא תופעל ראשונה, כי זה בדיוק מה שביקשת לעשות, אין פה שום שגיאה - מחשבים עדיין לא למדו לקרוא מחשבות.
באשר לבעיה שלך עם scanf, תן דוגמה לקלט שאתה מכניס.
ייתכן אגב, שאתה גם צריך לנקות את ה-buffer של stdin לפני ו\או אחרי שימוש ב-scanf תלוי במה שאתה ועשה.
פורסם: 14/06/2018 - 17:16
תודה על התגובות ,
את הקוד העתקתי מהאתר הזה בלינק הזה
https://www.javatpoint.com/c-goto
העיניין הוא כאשר אני מריץ את הקוד הזה ב IDE ONLINE כמו באתר הזה
הקוד עובד מצוין ,
ב NB עדיין אותם סימפטומים לא נפתרה הבעיה
בECLIPSE הקוד הזה גם לא עובד טוב ויש באגים בתצוגה .
אולי תוכל לב לנסות לתקן בשבילי את הקוד הזה ?
פורסם: 15/06/2018 - 07:21
ב IDE ONLINE הקוד "עובד" במקרה.
הקוד שכתוב לא מחוייב שיציג את מה שאתה חושב שהוא צריך לעשות.
שקול ללמוד את השפה ממקור אחר.
פורסם: 15/06/2018 - 09:55
מה הבעיה בקוד? לי הוא נראה דווקא בסדר.
גם מתקמפל ורץ יפה ב-GCC
פורסם: 15/06/2018 - 09:56
* כמובן מבחינת ההרצה של הקוד
מבחינת הכתיבה, יש בשביל דברים כאלה while-ים
פורסם: 16/06/2018 - 16:41
ניסיתי להסביר למה זה אולי עובד בגרסה המקוונת וקצת הסתבכתי.
הנה תוכנית קצת יותר פשוטה:
cat <<EOF >test.c
int num, success;
printf("Number: \n");
success = scanf("%d", &num);
printf("I got: %d\n", num);
gcc -Wall -o test test.c
אם אני מריץ אותו אני מקבל התנהגות דומה לזו שתוארה קודם: אם המספרים מופרדים ברווחים או טאבים, לא מקבלים את ההתנהגות המצופה:
I got: 1
I got: 2
I got: 3
I got: 4
לעומת זאת אם אני משחק קצת עם הגדרות המסוף אני מקבל כמעט את מה שרציתי: תגובה מיידית. אבל תצוגה מוזרה:
$ stty raw; ./test; stty cooked
1 I got: 1
2 I got: 2
3^MI got: 3
4 I got: 4
המדרגות הללו הן בגלל שיש רק מעברי שורה (newline) אולם אין חזרה לתחילת השורה (carrige return). יכול להיות שבתוכנית שמורצת באינטרנט הבעיה לא קיימת מכיוון שטקסט אינטרנטי כולל גם CR וגם NL בסוף כל שורה. שימו לב שלחיצת אנטר שלי מוצגת כאן כתו CR (כלומר: ‎^M). ניסיתי לשחק עוד קצת עם הפרמטרים של stty ולא הגעתי לתוצאה הרצויה.
למי שמשחק עם ההגדרות הללו, תזכורת למספר דרכים להחזיר את המסוף לימיו כקדם:
echo ^O # echo ctrl-v ctrl-o enter
# the Enter key does not respond: try ^J: ctrl-v ctrl-j
clear # or ctrl-l
# ctrl-q , in case you pressed ctrl-s
פורסם: 16/06/2018 - 16:43
פורסם: 16/06/2018 - 18:40
כנראה יש בעיה אצלי עם הנטבינס והאקליפס כנראה משהו בהגדרות לא טוב .
גם קודים אחרים לא עובדים שמה טוב .
אני אנסה לעשות חיפוש איך צריכה להיות הגדרה טובה בשבילם
או שפשוט אשאר עם ה VISUAL STUDIO , הוא בנתיים עובד טוב אצלי .
פורסם: 17/06/2018 - 07:18
לב כתב מה עיקר הבעיה בתכנית: אין טיפול נכון בbuffer של stdin או stdout.
[באשר לבעיה שלך עם scanf, תן דוגמה לקלט שאתה מכניס.
פורסם: 17/06/2018 - 13:57
נראה לי שהבעיה שלו מגיעה מההדפסה, הוא לא מדפיס CR וחלק מהטרמינלים של IDE לא ינקו את באפר הפלט, כלומר, לא יציגו כלום, וזה נראה כאילו אין קלט....
לעניות דעתי זה בזבוז זמן לנתח את הבעיה מכיוון שבעל הבעיה לא מראה שום רצון להבין אותה אלא רק לדלג בין IDE. לא נסיון בטרמינל של ממש, לא הקשת רגע אחד של מחשבה לכך שכל הIDE מקמפלים עם GCC (בהנחה שלא נעשה משהו מיוחד כדי לשנות את זה....) ורק "תתקנו לי".
פורסם: 17/06/2018 - 18:50
אני אכן דילגתי מ IDE ל IDE אבל ניסיתי לפתור כל בעיה ספציפית .
אני גם בעצמי משתדל , אם אין אני לי מי לי .
בינתיים הצלחתי לסדר את הנטבינס גם בווינדוס וגם בלינוקס (אובונטו )
VS עובד טוב ,
רק האקליפס בווינדוס לא עובד טוב יש באגים בתצוגה בטרמינל .
בקשר לבאפר סליחה אם לא התייחסתי לזה קודם , אני אעשה עכשיו קצת חיפושים לגבי זה
ואדווח על ההתקדמות , תודה לכל מי שעזר
פורסם: 26/06/2018 - 12:23
שימוש ב-scanf הוא לא באמת פשוט (במיוחד לא למתחילים, שלא מבינים מה זה stream) אבל הבשורות הטובות הן ש"בחיים האמיתיים" כמעט לא משתמשים בו.
משתמשים בו רק כשמלמדים אנשים את שפת C, כי צריך דרך לקלוט נתונים מהמשתמש. זה לא צריך להפריע לך: במקום לקלוט נתונים מהמשתמש, קודד אותם בתוך התוכנית -- זה יהיה יותר נוח. או שתריץ תוכנית כזו מהטרמינל. אתה עדיין יכול לעבוד בתוך ה-IDE.
אורח [יהודה]