איך בודקים האם משתנה הוא FLOAT - שפת C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

איך בודקים האם משתנה הוא FLOAT - שפת C


yogev92

Recommended Posts

שלום,

אני בונה תוכנה של מחשבון ורציתי לבדוק האם הקלט שלי הוא קלט של FLOAT חיפשתי במלא מדריכים באינטרנט ולא עבד לי אף אחד מהם יש לי כרגע את התוכנה VISUAL STDIO 2008

ניסיתי המון דברים ואף אחד מהם לא עבד לי, ד"א כרגע התוכנה שלי פועלת לפי התנאי:

if ( f/f == (int)1)

{

.....

}

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

נ.ב

אני מקבל מספר לדוגמא : 123.6

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

בתודה מראש,

יוגב

קישור לתוכן
שתף באתרים אחרים

קודם כל, הדרך הכי טובה לבדוק אם הקלט שלך הוא מספר שלם או לא היא לבדוק את זה עוד במהלך הקריאה. במקום לקרוא את הקלט כ-int או float, פשוט קרא אותו כמחרוזת ואז תבדוק אם מופיעה בו נקודה.

ויותר ספציפי לשאלתך: ניסית להשתמש בפונקציה floor ולהשוות את התוצאה?

כלומר:

if (f == floor(f))

?

נ.ב. מומלץ שתציין בכותרת באיזו שפה אתה כותב.

קישור לתוכן
שתף באתרים אחרים

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

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

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

בכל מקרה תודה רבה על התגובה!

קישור לתוכן
שתף באתרים אחרים

למה להבא? אתה יכול לערוך את הכותרת (תערוך את ההודעה הראשונה ושנה שם את הכותרת).

זו לא "פונקציה של אחרים", זו פונקציה בחבילה הסטנדרטית של השפה, בדיוק כמו isdigit

http://www.cplusplus.com/reference/clibrary/cmath/floor/

קישור לתוכן
שתף באתרים אחרים

סבבה אני אשנה עכשיו, לא ידעתי שיש אפשרות כזאת אני חדש בפורום הזה..

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

אין לי מושג למה זה קורה הדבר הזה..הוא כאילו מקבל את זה אבל בתוכנית עצמה אם אני כותב למשל @ + @ זה כותב לי בסוף " the sum of 0.00 and 0.00 is 0.00"

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

אתה יכול לפרט לי בקטנה מה היא עושה? בקצרה כזה..

תודה מראש!

קישור לתוכן
שתף באתרים אחרים

אני מניח שאתה קורא את המספר באמצעות scanf. הפונקציה הזו קוראת את הקלט עד שהיא מגיעה לתו שאותו היא לא יכולה לקרוא. לדוגמה, אם הכנסת את המחרוזת 123@432 אז היא תעצר אחרי ה-432, כי ב-@ היא כבר לא יכולה לטפל. אתה לא מצפה שהמספר יכיל את התו @ איכשהו, נכון?

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

קישור לתוכן
שתף באתרים אחרים

למה שתבדוק אם מספר שאתה מקבל הוא שלם או לא?

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

אם החלטת לעשות מחשבון רציונאלי, תקבל את הקלט לתוך float, תעשה את העיבודים באמצעות float, ותציג את התוצאה באמצעות float.

ז"א:

// code...

float input_number;

//...

scanf("%f", &input_number);

// more code...
float result;
result = input_number * input_number + 5;

printf("%f", result);

קישור לתוכן
שתף באתרים אחרים

מה אני עושה עם זה?..

זה יהיה נחמד אם מישהו ייתן לי פתרון מלא ולא ייזרוק תשובות אפשריות לאוויר..

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

קישור לתוכן
שתף באתרים אחרים

אפשר גם להשתמש ב- sscanf אחרי הקליטה והוידואים במקום strtod.

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

קישור לתוכן
שתף באתרים אחרים

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

תודה מראש

קישור לתוכן
שתף באתרים אחרים

א. מחרוזת היא מערך של תווים, ולכן לכל תו במחרוזת ניתן לגשת כמו לתא רגיל במערך של תווים (או בעזרת מצביע אם תרצה).

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

ג. עבור תו תו במערך התווים ובדוק מה יש שם:

1. אם מספר (למעשה סיפרה בין 0 ל-9), אז זה בסדר.

2. אם נקודה ראשונה, אז זה בסדר, אבל רק בתנאי שאחריה יש עוד סיפרה.

3. אם מדובר בנקודה שניה ומעלה - אז זה כבר לא מספר.

4. אם מדובר בכל תו אחר - זה לא מספר.

5. כמובן שאם מדובר במחרוזת ריקה - זה לא מספר.

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

הנה קוד ממש ממש בסיסי, שאפשר לשפר אותו כדי לבצע את הנ"ל:


#include <stdio.h>

void main()
{
char str[50];
int i;

printf("Enter String: ");
scanf("%s", &str);

i=0;
while (str[i]!= '\0')
{
printf("char %d: %c\n", i, str[i]);
i++;
} // end while

printf("The string you entered: %s", str);
} // end main

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...