עבור לתוכן

קליטת מטריצה C

Featured Replies

פורסם

בוקר טוב

אני צריך לקלוט מערך דו-מימדי (מטריצה) שהוגדר בתור

# define NUMCOLUMNS 4
# define NUMROWS 5
int matrice[NUMROWS][NUMCOLUMNS];

הבעיה היא שהוא אמור לקלוט את האיברים למערך הדו-מימדי אם אני כותב אותם ככה:

1 0 0 0

3 4 5 6

2 6 4 2

1 6 7 2

וגם אם אני כותב אותם ככה:

1 2 4 5 7 4 2 6 1 6 4 9 6 4 2 0

ובכל מקרה אחר לכתוב שגיאה

איך עושים דבר כזה?

פורסם

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

במקרה השני זה דווקא פשוט, באמצעות לולאה של scanf.

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

פורסם
  • מחבר

עכשיו כשהעלת את זה אני חושב שהם התכוונו למקרה השני (בהתחלה חשבתי שהתכוונו רק לראשון שציינת) אני באמת אוודא את זה

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

for (i=0; i<5;i++){
for (j=0; j<4;j++){
scanf("%d ", &matrice[i][j]);}
}

ותמיד בסוף יש בעיה :S

אני מצרף את הדוגמאות שהביאו לנו:

mr5mmkmmnfdj.jpg

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

אני כבר לא כל כך מבין איך הם רוצים שאני אבצע את הקלט .. כלומר, להכניס אותו לתוך CHAR ולתת תנאי על התחום לפי הטבלת ASCII ? :nixweiss:

פורסם

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

לא כזה מוזר, scanf לא מעבד את הקלט לכל מקש שמקלדת שאתה מקיש, אלא רק אחרי שאתה עושה enter.

מה הבעיה בקוד שכתבת? (חוץ מזה שאין לך שום בדיקת של שגיאות)

פורסם
  • מחבר

שאני לא מבין איזה בדיקת קלט לעשות :)

כלומר אם אני אכניס לו a במקום ספרה אז הוא יצא ישר מהתכנית, לא? איך אני גורם לו לכתוב ERROR לפני שהוא בורח?

פורסם

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

פורסם
  • מחבר

"אתה יכול להשתמש בערך ההחזרה שלה בשביל לבדוק את זה" לא הבנתי את המשפט הזה

פורסם
  • מחבר

מצטער לא הצלחתי להבין את הקשר מההסבר שם

אפשר דוגמא או משהו כזה? זה רק חלק ראשון מתוך הבעיה, זה אפילו לא העיקר

פורסם

מה לא ברור? scanf מחזירה את מספר האלמנטים שנקראו, או את הקבוע EOF אם היא נכשלה לחלוטין.

נניח שעשית:

res = scanf("%d", &x);

אז הפונקציה הצליחה אם ורק אם res == 1.

פורסם
  • מחבר

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

ומה אני עושה כדי שזה יכתוב שגיאה אם הוכנסו יותר מ 20 ערכים?

פורסם
  • מחבר

לא צריך

אתה לא חייב לענות

ארכיון

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

דיונים חדשים