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

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


sharonp

Recommended Posts

בוקר טוב

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

# 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 גם ייכשלו.

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

ארכיון

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

×
  • צור חדש...