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

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

הודעה פורסם: 13/06/2018 - 21:20
נושא ההודעה: IDE טוב בשביל C

אני לומד את C , ממש בהתחלה , עובר על הסינטקס הבסיסי ועובד עדיין עם המסוף .
NETBEANS תמיד היה לי הכי נוח , רק חבל שיש לי עכשיו בעיה קצת מוזרה איתו .
למשל קוד כזה .
קוד:
#include <stdio.h> 
int main() { 
  int age; 
   ineligible: 
   printf("You are not eligible to vote!\n"); 
 
   printf("Enter you age:\n"); 
   scanf("%d", &age); 
   if(age<18) 
        goto ineligible; 
   else 
        printf("You are eligible to vote!\n"); 
 
   return 0; 


אמור היה על ההתחלה להציג "הכנס את גילך " ומשום מה לא מציג אותו .
בעיה נוספת 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 אחרי שמתקינים אותו.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
elcucoלא בפורום כעת ת.הצטרפות: 14/10/2003 · הודעות: 6255 ·
 

הודעה פורסם: 14/06/2018 - 14:16
נושא ההודעה:

Anonymous :
goto היא הוראה ראויה ושימושית, רוב המשמיצים לא פגשו את הבעיות האמיתיות שלה אלא חוזרים באופן דתי על מה ששמעו. המאמר שכותרתו המקורית "A case against the goto statement" (ששונה ע"י עורך הג'ורנל לכותרת הקליק-בייט "goto considered harmful") דיבר על עולם אחר, שבו goto היא הצורה העיקרית לנהל זרימה של תוכנית, וברוב השפות, לא הייתה דרך לייצר בלוקים (ובקושי פונקציות).

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

ולשאלתו של הפונה: יתכן שזה בגלל buffering שעושה netbeans, איני יודע. האם אותו הדבר קורה כאשר אתה מריץ את אותה פקודה מהטרמינל? (ללא redirection כמובן, כלומר, ללא שימוש בהוראות < | > וחברותיהן)

אם אתה מחפש IDE טוב ל- C, שווה לנסות את Visual Studio Code, למרות שהוא נכתב ע"י חברה עם אתיקה מפוקפקת ועבר פלילי - הוא בקוד פתוח לחלוטין, ועובד מצוין; באובונטו ניתן להתקין אותו בקלות ע"י umake. מומלץ מאוד לכבות telemetry אחרי שמתקינים אותו.


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

מצד שני - אני יכול להמליץ על QtCreator.
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 14/06/2018 - 15:43
נושא ההודעה: Re: IDE טוב בשביל C

יהודה :

אמור היה על ההתחלה להציג "הכנס את גילך " ומשום מה לא מציג אותו .
בעיה נוספת SCANF עד כמה שידוע לי קולט מחרוזת עד ENTER
ורק אחרי שאני לוחץ כמה פעמים על אנטר הוא סוף סוף ממשיך בקוד .

יש למישהו מושג מה יכולה להיות הבעיה ?


אמור זה שם של דג! Laughing

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

לא משנה איזה IDE תפתח, התוצאה תהיה זהה.

אתה רשמת את שורת ההדפסה:
קוד:
printf("You are not eligible to vote!\n");


לפני הכל! לפני כל יתר הקוד שלך!

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

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

ייתכן אגב, שאתה גם צריך לנקות את ה-buffer של stdin לפני ו\או אחרי שימוש ב-scanf תלוי במה שאתה ועשה.

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

הודעה פורסם: 14/06/2018 - 17:16
נושא ההודעה:

תודה על התגובות ,
את הקוד העתקתי מהאתר הזה בלינק הזה
https://www.javatpoint.com/c-goto

העיניין הוא כאשר אני מריץ את הקוד הזה ב IDE ONLINE כמו באתר הזה
https://www.onlinegdb.com/online_c_compiler

הקוד עובד מצוין ,


ב NB עדיין אותם סימפטומים לא נפתרה הבעיה
בECLIPSE הקוד הזה גם לא עובד טוב ויש באגים בתצוגה .



ציטוט:
באשר לבעיה שלך עם scanf, תן דוגמה לקלט שאתה מכניס.

ייתכן אגב, שאתה גם צריך לנקות את ה-buffer של stdin לפני ו\או אחרי שימוש ב-scanf תלוי במה שאתה ועשה.


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

הודעה פורסם: 15/06/2018 - 07:21
נושא ההודעה:

ב IDE ONLINE הקוד "עובד" במקרה.
הקוד שכתוב לא מחוייב שיציג את מה שאתה חושב שהוא צריך לעשות.

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

הודעה פורסם: 15/06/2018 - 09:55
נושא ההודעה:

borsood :
ב IDE ONLINE הקוד "עובד" במקרה.
הקוד שכתוב לא מחוייב שיציג את מה שאתה חושב שהוא צריך לעשות.

שקול ללמוד את השפה ממקור אחר.


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

הודעה פורסם: 15/06/2018 - 09:56
נושא ההודעה:

Anonymous :
borsood :
ב IDE ONLINE הקוד "עובד" במקרה.
הקוד שכתוב לא מחוייב שיציג את מה שאתה חושב שהוא צריך לעשות.

שקול ללמוד את השפה ממקור אחר.


מה הבעיה בקוד? לי הוא נראה דווקא בסדר.
גם מתקמפל ורץ יפה ב-GCC


* כמובן מבחינת ההרצה של הקוד
מבחינת הכתיבה, יש בשביל דברים כאלה while-ים Smile
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
צפריראורח · ·
 

הודעה פורסם: 16/06/2018 - 16:41
נושא ההודעה:

ניסיתי להסביר למה זה אולי עובד בגרסה המקוונת וקצת הסתבכתי.

הנה תוכנית קצת יותר פשוטה:
קוד:

cat <<EOF >test.c
#include <stdio.h>

int main() {
        int num, success;

        while(1) {
                printf("Number: \n");
                success = scanf("%d", &num);
                if (!success)
                        break;
                printf("I got: %d\n", num);
        }
        return 0;
}

EOF

gcc -Wall -o test test.c

אם אני מריץ אותו אני מקבל התנהגות דומה לזו שתוארה קודם: אם המספרים מופרדים ברווחים או טאבים, לא מקבלים את ההתנהגות המצופה:
קוד:

$ ./test
Number:
1 2 3
I got: 1
Number:
I got: 2
Number:
I got: 3
Number:
4 f 5
I got: 4
Number:


לעומת זאת אם אני משחק קצת עם הגדרות המסוף אני מקבל כמעט את מה שרציתי: תגובה מיידית. אבל תצוגה מוזרה:
קוד:

$ stty raw; ./test; stty cooked
Number:
        1 I got: 1
                  Number:
                          2 I got: 2
                                    Number:
                                            3^MI got: 3
                                                       Number:
                                                               4 I got: 4
                                                                         Number:
                                                                                 f$

המדרגות הללו הן בגלל שיש רק מעברי שורה (newline) אולם אין חזרה לתחילת השורה (carrige return). יכול להיות שבתוכנית שמורצת באינטרנט הבעיה לא קיימת מכיוון שטקסט אינטרנטי כולל גם CR וגם NL בסוף כל שורה. שימו לב שלחיצת אנטר שלי מוצגת כאן כתו CR (כלומר: ‎^M). ניסיתי לשחק עוד קצת עם הפרמטרים של stty ולא הגעתי לתוצאה הרצויה.

למי שמשחק עם ההגדרות הללו, תזכורת למספר דרכים להחזיר את המסוף לימיו כקדם:
קוד:

stty sane
reset
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
נושא ההודעה:

ניסיתי להסביר למה זה אולי עובד בגרסה המקוונת וקצת הסתבכתי.

הנה תוכנית קצת יותר פשוטה:
קוד:

cat <<EOF >test.c
#include <stdio.h>

int main() {
        int num, success;

        while(1) {
                printf("Number: \n");
                success = scanf("%d", &num);
                if (!success)
                        break;
                printf("I got: %d\n", num);
        }
        return 0;
}

EOF

gcc -Wall -o test test.c

אם אני מריץ אותו אני מקבל התנהגות דומה לזו שתוארה קודם: אם המספרים מופרדים ברווחים או טאבים, לא מקבלים את ההתנהגות המצופה:
קוד:

$ ./test
Number:
1 2 3
I got: 1
Number:
I got: 2
Number:
I got: 3
Number:
4 f 5
I got: 4
Number:


לעומת זאת אם אני משחק קצת עם הגדרות המסוף אני מקבל כמעט את מה שרציתי: תגובה מיידית. אבל תצוגה מוזרה:
קוד:

$ stty raw; ./test; stty cooked
Number:
        1 I got: 1
                  Number:
                          2 I got: 2
                                    Number:
                                            3^MI got: 3
                                                       Number:
                                                               4 I got: 4
                                                                         Number:
                                                                                 f$

המדרגות הללו הן בגלל שיש רק מעברי שורה (newline) אולם אין חזרה לתחילת השורה (carrige return). יכול להיות שבתוכנית שמורצת באינטרנט הבעיה לא קיימת מכיוון שטקסט אינטרנטי כולל גם CR וגם NL בסוף כל שורה. שימו לב שלחיצת אנטר שלי מוצגת כאן כתו CR (כלומר: ‎^M). ניסיתי לשחק עוד קצת עם הפרמטרים של stty ולא הגעתי לתוצאה הרצויה.

למי שמשחק עם ההגדרות הללו, תזכורת למספר דרכים להחזיר את המסוף לימיו כקדם:
קוד:

stty sane
reset
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 - 18:40
נושא ההודעה:

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

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

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

הודעה פורסם: 17/06/2018 - 07:18
נושא ההודעה: Re: IDE טוב בשביל C

לב כתב מה עיקר הבעיה בתכנית: אין טיפול נכון בbuffer של stdin או stdout.

Anonymous :
[באשר לבעיה שלך עם scanf, תן דוגמה לקלט שאתה מכניס.

ייתכן אגב, שאתה גם צריך לנקות את ה-buffer של stdin לפני ו\או אחרי שימוש ב-scanf תלוי במה שאתה ועשה.

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

הודעה פורסם: 17/06/2018 - 13:57
נושא ההודעה: Re: IDE טוב בשביל C

borsood :
לב כתב מה עיקר הבעיה בתכנית: אין טיפול נכון בbuffer של stdin או stdout.

Anonymous :
[באשר לבעיה שלך עם scanf, תן דוגמה לקלט שאתה מכניס.

ייתכן אגב, שאתה גם צריך לנקות את ה-buffer של stdin לפני ו\או אחרי שימוש ב-scanf תלוי במה שאתה ועשה.

--לב


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

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

הודעה פורסם: 17/06/2018 - 18:50
נושא ההודעה:

אני אכן דילגתי מ IDE ל IDE אבל ניסיתי לפתור כל בעיה ספציפית .
אני גם בעצמי משתדל , אם אין אני לי מי לי .

בינתיים הצלחתי לסדר את הנטבינס גם בווינדוס וגם בלינוקס (אובונטו )
VS עובד טוב ,
רק האקליפס בווינדוס לא עובד טוב יש באגים בתצוגה בטרמינל .

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

הודעה פורסם: 26/06/2018 - 12:23
נושא ההודעה:

שימוש ב-scanf הוא לא באמת פשוט (במיוחד לא למתחילים, שלא מבינים מה זה stream) אבל הבשורות הטובות הן ש"בחיים האמיתיים" כמעט לא משתמשים בו.

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

תוכן הדיון

  1. אורח [יהודה]
  2. אורח
  3. אורח
  4. elcuco
  5. אורח
  6. אורח [יהודה]
  7. borsood
  8. אורח
  9. אורח
  10. אורח [צפריר]
  11. אורח [צפריר]
  12. אורח [יהודה]
  13. borsood
  14. אורח
  15. אורח [יהודה]
  16. אורח [ירחמיאל]