ABA


"בעיה ב C בקליטת מספר שלם"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #11463 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 11463
Benayoun15
חבר מתאריך 7.6.02
1026 הודעות
   19:15   02.12.04   
אל הפורום  
  בעיה ב C בקליטת מספר שלם  
 
   אני רוצה לקלוט מהמשתמש מספר שלם
עכשיו אם הוא מכניס מספר לא שלם צריך להודיע לו
Input error
אם אני מגדיר את המשתנה כ int
והוא מכניס 42.2
זה לוקח רק את ה 42 וזה לא טוב אני רוצה להציג הודעה
הצלחתי לעשות זאת ע"י קליטת double ובדיקה אם זה שלם
אבל יש בעיה במספרים גדולים כמו 910984 שזה לא בטווח של double
מה לעשות


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  910984 לא ''גדול'' על double... Dudenland 03.12.04 01:45 1
     דווקא כתבתי בדיוק כך Benayoun15 05.12.04 00:09 2
         ממ אין לי מושג אבל יש מצב שזה long duble או משהוא :$ DRagonFire 05.12.04 00:17 3
             אני לא בטוח שזה יעבוד Benayoun15 05.12.04 23:11 4
         אל תגיד ''זה לא פועל''... באיזה Compiler אתה משתמש? Dudenland 06.12.04 00:03 5
             תודה אבל אני לא שואל למה זה לא פועל Benayoun15 06.12.04 20:49 6
  +-+ יותר טוב אני אתן דוגמא לשאלה ותפתרו +-+- Benayoun15 06.12.04 22:26 7
     טוב, תראה: Dudenland 07.12.04 00:55 8
         WOW DRagonFire 07.12.04 19:15 9
             בבקשה: Dudenland 07.12.04 20:52 10

       
Dudenland

   01:45   03.12.04   
אל הפורום  
  1. 910984 לא ''גדול'' על double...  
בתגובה להודעה מספר 0
 
   אני רק יכול לשער שלא כתבת נכון את שורת הקלט...
זה צריך להיות כך: ;(scanf("%lf", &num


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Benayoun15
חבר מתאריך 7.6.02
1026 הודעות
   00:09   05.12.04   
אל הפורום  
  2. דווקא כתבתי בדיוק כך  
בתגובה להודעה מספר 1
 
   וזה לא פועל למספרים ארוכים כמו זה ..
רק לקצרים של 3-4 ספרות


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

   00:17   05.12.04   
אל הפורום  
  3. ממ אין לי מושג אבל יש מצב שזה long duble או משהוא :$  
בתגובה להודעה מספר 2
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Benayoun15
חבר מתאריך 7.6.02
1026 הודעות
   23:11   05.12.04   
אל הפורום  
  4. אני לא בטוח שזה יעבוד  
בתגובה להודעה מספר 3
 
   כי המחשב שומר את ה double בצורה מאוד מוזרה
ואז כשאני עושה בדיקה אם זה שלם ככה :

if ((int)(num)!=num ) printf("error");


זה יעשה לי שגיאה בכל זאת.....

איך בכל זאת כדאי לבדוק אם המספר שהוכנס שלם בדרך אחרת ?


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

   00:03   06.12.04   
אל הפורום  
  5. אל תגיד ''זה לא פועל''... באיזה Compiler אתה משתמש?  
בתגובה להודעה מספר 2
 
   תבין. double, כמו כל שאר הטיפוסים, מוגדר ע"י מערכת-ההפעלה. כדי לא ליצור בלבול בין מערכות, קבעו תקן (IEEE) שקובע סטנדרט קבוע לטיפוסים, ובו מוגדר double כמשתנה שגודלו 8 בתים.
המספר 910984 מתפרש על-פני 8 בתים, כמספר 0x00000000412BCD10. תוכל להבין זאת לאחר שתדע קצת על אודות המבנה שלו (ואתה בטח שם לב שיש מקום לעוד הרבה ספרות, כך שהמספר הנ"ל אפילו לא "ארוך"). לכן, לא ייתכן ש"זה לא פועל".


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Benayoun15
חבר מתאריך 7.6.02
1026 הודעות
   20:49   06.12.04   
אל הפורום  
  6. תודה אבל אני לא שואל למה זה לא פועל  
בתגובה להודעה מספר 5
 
   אני אומר שזה לא פועל
ואני מבקש או תיקון
או דרך חלופית


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Benayoun15
חבר מתאריך 7.6.02
1026 הודעות
   22:26   06.12.04   
אל הפורום  
  7. +-+ יותר טוב אני אתן דוגמא לשאלה ותפתרו +-+-  
בתגובה להודעה מספר 0
 
   קלוט מספר
הפוך את ספרותיו
זה הדרישה
עכשיו המספר חייב להיות שלם וצריך לבדוק את זה...


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

   00:55   07.12.04   
אל הפורום  
  8. טוב, תראה:  
בתגובה להודעה מספר 7
 
   ערכתי לאחרונה בתאריך 07.12.04 בשעה 00:55 בברכה, Dudenland
 
אני לא מבין למה זה לא "פועל" לך, אבל ננסה אלטרנטיבה:

#include <stdio.h>

int main(void)
{
char num{256};
int i = 0;

scanf("%{0-9.}s", num);
while(num{++i} != '\0')
if(num{i} == '.')
return -1;

for(i--; i >= 0; i--)
putchar(num{i});

return 0;
}


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

   19:15   07.12.04   
אל הפורום  
  9. WOW  
בתגובה להודעה מספר 8
 
   אולי תסביר את הפונקציה
putchar

ומממ מה עשיתה פה

    while(num{++i} != '\0')
if(num{i} == '.')
return -1;


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

   20:52   07.12.04   
אל הפורום  
  10. בבקשה:  
בתגובה להודעה מספר 9
 
   הפלט של ('putchar('C שקול לפלט של ("printf("C... זה פשוט לשים "תו בודד" במקום "מחרוזת של תו אחד"... תכל'ס, אין כל-כך הבדל (כמובן שיש הבדל במימוש של שתי הפונקציות... אבל זה לא קשור לבעייה הנ"ל...

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


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

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

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



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