ABA


"עזרה עם SCANF ו-EOF"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #20364 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 20364
IdoA
חבר מתאריך 1.8.02
19395 הודעות, דרג אמינות חבר זה
   22:39   24.11.13   
אל הפורום  
  עזרה עם SCANF ו-EOF  
 
טוב אני מתכנת המון שנים ב-C אבל השאלות שדורשים עכשיו באקדמיה יכולים להיות ממש מעצבנות למי שיודע חומר של הרבה מעבר ומרוב שמנסה להתחכם לא יוצא לו כלום.

ביקשו משהו ממש פשוט. לקלוט מספר שלם ולעשות איתו אחרי זה משהו (לא רלוונטי מה). המס' יכול להופיע בשני צורות או לדוגמא 5 או 5.0 . מותר whitespaces אסור אף תו בקלט.
כמובן שאני צריך אינדיקציה האם זה 5 או 5.0 . אז מה עשה הראש נצנץ שלי, אמר שאם התו נכנס הוא לא שורה חדשה - תפיל את התוכנית.
ואז בא המתרגל שלי וטען אם בקובץ י רצף של המספר (נניח 5), שורה חדשה, ואחרי זה מלא מלא תווים. זה עדיין לא טוב.
ואני משתגע . כמובן שהוא אוסר על לולאות בתרגיל פשוט שכזה.
ועוד דבר, איך אני מממש את העניין של הנקודה כי אם יש בקלט לדוגמא 5. (5 ואז נקודה) זה קלט לא תקין..

זה לא אשכול תפתרו לי את השיעורי בית, זה בבקשה מה אני מפספס פה...

תודה

Do you ever listen to K Billy's Super Sounds of the 70's?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אהה לא הבנתי כלום אולי תסביר בקצרה מה בדיוק אתה צריך לעשות? dyermaker  24.11.13 22:51 1
     שוב IdoA 24.11.13 23:24 2
         מכתב Dimona 24.11.13 23:54 4
             זה לא עוזר לי IdoA 25.11.13 00:09 5
  לא הבנתי את השאלה =\ Dimona 24.11.13 23:51 3
  אפשר לפתור את זה בהתחכמות די טיפשית ShocKi  25.11.13 12:04 6
     תודה אבל זה גם לא יעזור לי IdoA 25.11.13 14:16 7
  יש לך פה pattern כנס איציק2 25.11.13 17:43 8
     אני כמעט בסוף אבל עכשיו יש לי שאלה IdoA 25.11.13 20:44 9
     אכן - כך כתבתי IdoA 25.11.13 21:16 10
         טוב אז הקוד הזה לא טוב, עזרה בבקשה :( IdoA 26.11.13 00:52 11
             אתה עשית משו שם עם scanf ואח''כ getchar, אתה לא אמור להשתמש רק בgetchar? איציק2 26.11.13 20:21 12
  מותר להשתמש ב-atoi ו-atof? כובען  30.11.13 11:03 13

       
dyermaker 
חבר מתאריך 4.2.03
1644 הודעות, דרג אמינות חבר זה
   22:51   24.11.13   
אל הפורום  
  1. אהה לא הבנתי כלום אולי תסביר בקצרה מה בדיוק אתה צריך לעשות?  
בתגובה להודעה מספר 0
 
   אתה צריך לעשות scanf כשהקלט יכול להיות גם INT וגם FLOAT ??


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
IdoA
חבר מתאריך 1.8.02
19395 הודעות, דרג אמינות חבר זה
   23:24   24.11.13   
אל הפורום  
  2. שוב  
בתגובה להודעה מספר 1
 
אני צריך לקלוט מס שלם בלבד
המס' יכול להופיע או כ המספר עצמו או כהמספר עצמו נקודה אפס (או אין סוף אפסים) . כל דבר אחר יתן שגיאה

Do you ever listen to K Billy's Super Sounds of the 70's?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dimona לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 28.11.10
1910 הודעות, 1 פידבק, 1 נקודות
   23:54   24.11.13   
אל הפורום  
  4. מכתב  
בתגובה להודעה מספר 2
 
   תנסה לעשות דבר כזה אם הבנתי אותך נכון
אם מספר מסוים נכנס לקלט נקח לדוגמא את 5.0, אתה יכול לעשות לו קאסטינג לint
ואז לבדוק אם

float x=5.0
x - int(x)

במקרה הזה אם המספר הוא שלם ללא שארית כלומר 5.0-5 לא יחזיר שארית
אם המספר הוא 5.002-5 הוא יחזיר שארית.
השארית גדולה מ0 ואז זה התנאי שלך

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


float x=0.5;
int y;

y=x

אם תדפיס את y הוא יתן לך תוצאה שלמה ללא השארית


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
IdoA
חבר מתאריך 1.8.02
19395 הודעות, דרג אמינות חבר זה
   00:09   25.11.13   
אל הפורום  
  5. זה לא עוזר לי  
בתגובה להודעה מספר 4
 
בגדול התרגיל אומר ככה
אם המשתמש מכניס 5 תדפיס 5*5
אם מכניס 5.0 תדפיס 5.0*5.0

זה מה שזה אומר, אני צריך אינדיקציה האם נכנס 5.0 או 5

Do you ever listen to K Billy's Super Sounds of the 70's?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dimona לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 28.11.10
1910 הודעות, 1 פידבק, 1 נקודות
   23:51   24.11.13   
אל הפורום  
  3. לא הבנתי את השאלה =\  
בתגובה להודעה מספר 0
 
   אתה רוצה לדעת אם המספר הוא 5 או 5.0? כלומר float או int?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ShocKi  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.3.02
20171 הודעות, 10 פידבק, 17 נקודות
   12:04   25.11.13   
אל הפורום  
  6. אפשר לפתור את זה בהתחכמות די טיפשית  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 25.11.13 בשעה 12:20 בברכה, ShocKi
 
בהנחה שהבנתי נכון את כוונתך, זה פותר את הבעיה:

#include <stdio.h>
#include <ctype.h>

void main()
{
char x,y=NULL;
scanf("%c.%c",&x,&y);
flushall();
if (isdigit(x)>0)
{
if (y)
if (isdigit(y)>0)
printf("\n%c.%c",x,y);
else
printf("%c not a digit",y);
else
printf("\n%c",x);;
}
else
printf("%c not a digit",x);
}

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

שים לב שיש כאן הנחה שהצורת קלט היא תמיד x או x.y כאשר x,y הם תווים בודדים אם למשל יכניסו לך קלט 5g זה יתעלם מה g וימשיך רק עם ה 5.
אפשר כמובן להתגבר על זה ע"י כך שבמקום לכתוב


scanf("%c.%c",&x,&y);

תכתוב

scanf("%c%c%c",&x,&a,&y);

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


קאש-באק ישראלי: https://www.cashback.co.il/?uref=33330
קאשבק לAsos ואמזון דרך Ebates: https://goo.gl/MX87Y7 - מקבלים 10$ לאחר שימוש ראשון.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
IdoA
חבר מתאריך 1.8.02
19395 הודעות, דרג אמינות חבר זה
   14:16   25.11.13   
אל הפורום  
  7. תודה אבל זה גם לא יעזור לי  
בתגובה להודעה מספר 6
 

א. כי זה חומר שלא לומד וצריך לקלוט כל מס' שלם למשל 100

Do you ever listen to K Billy's Super Sounds of the 70's?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות, דרג אמינות חבר זה
   17:43   25.11.13   
אל הפורום  
  8. יש לך פה pattern כנס  
בתגובה להודעה מספר 0
 
   אחרי שהמשתמש הקליד 5 יש לו 2 אפשרויות... להכניס אנטר או נק'.
אם הכניס אנטר, ביצעת מה שביצעת, אם הכניס נק' יש לך אפשרות אחת - לקבל 0.
אם לא קיבלת 0 (אנטר או משו) - שגיאה.
אם קיבלת 0, יש לך 2 אפשרויות - לקבל אנטר או שוב 0 וחוזר חלילה..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
IdoA
חבר מתאריך 1.8.02
19395 הודעות, דרג אמינות חבר זה
   20:44   25.11.13   
אל הפורום  
  9. אני כמעט בסוף אבל עכשיו יש לי שאלה  
בתגובה להודעה מספר 8
 
איך אני אומר יש לי תנאי
אם תנאי אחד או תנאי 2 או תנאי3
עכשיו תנאי 3 זה משתנה לא שווה למשהו אבל יש לי איזה מקרה ספציפי שזה בסדר..

Do you ever listen to K Billy's Super Sounds of the 70's?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
IdoA
חבר מתאריך 1.8.02
19395 הודעות, דרג אמינות חבר זה
   21:16   25.11.13   
אל הפורום  
  10. אכן - כך כתבתי  
בתגובה להודעה מספר 8
 
האם יש למישהו רעיון איך לצמצם את הקוד?
להמנעמהשכפול של ההודעת שגיאה , ולהציג את המכפלה עם אופרטור ?: בהודעה אחת למשתמש במקום 2 נפרדות?


Do you ever listen to K Billy's Super Sounds of the 70's?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
IdoA
חבר מתאריך 1.8.02
19395 הודעות, דרג אמינות חבר זה
   00:52   26.11.13   
אל הפורום  
  11. טוב אז הקוד הזה לא טוב, עזרה בבקשה :(  
בתגובה להודעה מספר 10
 

במקרה שיש קובץ עם

2.0
a

זה עדיין מציג את התוצאה בזמן שזה מצב שגוי..
יש למישהו ראיון איך אני פותר את הסוגייה?

Do you ever listen to K Billy's Super Sounds of the 70's?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות, דרג אמינות חבר זה
   20:21   26.11.13   
אל הפורום  
  12. אתה עשית משו שם עם scanf ואח''כ getchar, אתה לא אמור להשתמש רק בgetchar?  
בתגובה להודעה מספר 11
 
   ותבדוק אם אתה לא יכול עם לולאות.. עם לולאה יהיה הרבה יותר נעים לעשות את זה..(ויאפשר לך באמת שורה אינסופית של אפסים אחרי הנק'..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק, 10 נקודות
   11:03   30.11.13   
אל הפורום  
  13. מותר להשתמש ב-atoi ו-atof?  
בתגובה להודעה מספר 0
 
אם כן, פשוט תקלוט מחרוזת ותמיר אותה לפי הצורך (אם זה מותר)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net