עבור לתוכן

בעיה קטנה בתוכנית c++

Featured Replies

פורסם

היי

ניסיתי לקלוט נתונים ל3 משתנים בפורמט הבא:

dd-mmm-yy שנה/חודש/יום

השתמשתי בפקודה הבאה:

scanf("%d-%s-%d",&day,&month,&year);

היום נקלט כמו שצריך

בחודש הוא קולט לי גם את החודש וגם את השנה

למשל לקלט

18-jun-80

בחודש נקלט לי

jun-80

בשנה לא נקלט כלום

הערה: בגלל שהכתוב נמצא בפורמט ימין-שמאל אז כשכתבתי את הקלט זה לא נראה כמו שצריך

תודה לעוזרים

פורסם

תקלוט עם %3s וככה scanf יידע שהמחרוזת נגמרת אחרי 3 תווים.

אגב, אלו פונקציות של C ולא של C++.

פורסם
  • מחבר

יצר לי עוד יותר בלאגן בקליטה.

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

פורסם

כשאתה קולט לתוך מחרוזת, אתה לא צריך להוסיף &.

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

פורסם
  • מחבר

גם בלי ה& זה לא עובד כמו שצריך.

למשל אם ניקח את התוכנית הזאת:

#include <stdio.h>

int main()
{
char s[2],s2[3],s3[2];
printf("Enter a date as dd-mmm-yy:\n");
scanf("%s-%s-%s",s,s2,s3);
printf("first=%s",s);
printf("second=%s",s2);
printf("third=%s",s3);

return 0;
}

התוכנית לא קולטת נכון את הערכים.

מה צריך לתקן כדי שהתוכנית תעבוד כמו שצריך?

פורסם

תגדיר את המחרוזת שלך בגודל אחד יותר(בשביל הבקסלש אפס שמציין את סוף המחרוזת).

פורסם
  • מחבר

ניסיתי ולא עזר. התוכנית קולטת את כל הביטוי לכל אחת מהמחרוזות.

פורסם

שמת 3 ו- 2 בין ה%ל- S?

%2s-%3s-%2s

פורסם

ניסיתי ולא עזר. התוכנית קולטת את כל הביטוי לכל אחת מהמחרוזות.

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

פורסם
  • מחבר

תודה רבה. עכשיו זה עובד.

ארכיון

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

דיונים חדשים