עבור לתוכן

בעיית מערכים בC

Featured Replies

פורסם

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

הבעיה היא שאין רווחים בין ספרה לספרה ככה שכל ניסיון ללולאה עם SCANF נותן לי שהמערך מנסה לקלוט את כל המספר בין 40 התווים.

ניסיתי עם CHAR אבל זה נראה לי ממש לא הכיוון...

אשמח לרעיון כלשהו לביצוע הדבר.

תודה רבה שי!

פורסם

scanf("%1d", &x);

ה-1 מוודא שאתה קורא רק ספרה אחת מהמספר כל פעם.

פורסם
  • מחבר

אויי אני כל כך מטומטם :bash:

איך אני נתקע על דבר שלמדתי בשיעור ראשון... :pissed:

תודה יואב!! :xyxthumbs:

פורסם
  • מחבר

אוקיי אז הצלחתי עם העניין הזה, הבעיה היא שאני מנסה בתרגיל לקבל 2 מספרים גדולים הנעים בין 0-N

אם לוחצים ENTER זה אמור לסיים כל מערך.

ניסיתי לתת לו אם המספר במערך שווה ל'n\' גם '13' וזה לא מפסיק את זה.

אבל כשכותבים סתם אות זה מפסיק וזה לא מה שאני מחפש.

int getNum (int arr1[],int arr2[],int n)
{
int k=1,i,j;
printf("Please enter two positive numbers: ");
for (i=0;i<N&&k==1;i++){
scanf ("%1d",&arr1[i]);
if (arr1[i]=='\n')
{
k=0;
}
}
for (j=0,k=1;i<N&&k==1;j++){
scanf ("%1d",&arr2[j]);
if (arr2[j]=='\n')
{
k=0;
}
}
printf("end");
}

פורסם

כשמנסים לקרוא מספרים באמצעות scanf אז הוא אוטומטית מדלג על כל תווי ה-whitespace (רווחים, ירידות שורה, טאבים וכד'). הדרך היחידה לא לדלג עליהם היא באמצעו c% (לקרוא תו בודד) או s% (לקרוא מחרוזת).

אתה קורא ספרות לתוך מערך של int, אז איך אתה מצפה שהמערך יכיל את התו 'n\'?

פורסם
  • מחבר

ניסיתי גם עם CHAR

אמרתי לו שהתו צריך להיות בין 0-9, אז למה שאני לוחץ אנטר הוא ממשיך עם הלולאה?

מה שמוזר שהוא יפסיק עם 2 הלולאות ברגע שמספר התווים יהיה שווה לN שהגדרתי.

אך שמתי תנאי לכל לולאה שהוא ימשיך רק אם בין 0-9

char getNum (char arr1[],char arr2[],int n)
{
int k=1,i,j;
printf("Please enter two positive numbers: ");
for (i=0;i<N&&(arr1[i]<=9||arr1[i]>=0);i++){
scanf ("%c",&arr1[i]);


}
for (j=0,k=1;i<N&&(arr2[j]<=9||arr2[j]>=0);j++){
scanf ("%c",&arr2[j]);

}
printf("bad");
}

פורסם
  • מחבר

והחלפתי את הINT שם בצ'ארים גם.

פורסם

כשאתה קורא מספרים בתור char אז הם לא יהיו 0 עד 9, הם יהיו התווים '0' עד '9'.

פורסם
  • מחבר

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

אני באמת לא יודע איפה אני טועה

פורסם

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

פורסם

אם אתה רוצה לקרוא את הכל לתוך מערך, אתה יכול להשתמש בכמה אופציות:

1. שימוש בGETCH בלולאה כדי לקבל את התווים ואז עד שאתה מגיע לתו של אנטר. ולהשתמש בATOI להפוך כל סיפרה למספר לשים במערך.

2. אתה יכול לקבל את המספר הגדול כולו דרך SCANF עם %s ואז להשתמש בATOI על כל תו בנפרד ולהעביר אותו למערך של INTים.

ויש עוד הרבה.

פורסם

לא מומלץ להשתמש ב-getch, כי היא קוראת ישירות מהמקלדת בלי חוצץ, וזו גם לא פונקציה סטנדרטית. עדיף להשתמש ב-getc/fgetc או scanf עם c%.

וגם לא באמת צריך להשתמש ב-ATOI עבור ספרה אחת בלבד, זה overkill. אפשר פשוט לחסר '0'.

פורסם
  • מחבר

איך בדיוק אני עושה את זה?

הוא קולט דרך scanf וc% משתנים, אני לא מצליח לגרום לו לצאת עם ENTER עדיין,

גם לא הבנתי מה לשים בתנאי, אם המערך [arr[i שווה ל משהו בתוך גרשיים? בלי גרשיים?

פורסם
  • מחבר

כל הבלאגן בתוכנית התחיל כשעברתי לchar

אי אפשר לעשות את זה עם איניג'רים, והשוואה לEOF או משהו בסגנון הזה?

פורסם
  • מחבר

אני עדיין תקוע בתוכנית הזאת, אני מאוד קרוב לסיום.

מה שקורה הוא שאני רוצה שאנטר יעבור ללולאה הבאה וזה בסדר, אני מעוניין שהוא יציג לי את השגיאה רק אם יש תו שהוא לא בין0-9 או שהוא לא אנטר.

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

[size=1]for (i=0;i<N&&z!=1;i++){[/size]
[size=1] k=scanf ("%c",&arr1[i]);[/size]
[size=1] if (arr1[i]=='\n')[/size]
[size=1] z=1;[/size]
[size=1]if ((arr1[i]>9||arr1[i]<0)&&z!=1) [/size]
[size=1]{[/size]
[size=1] l=1;[/size]

[size=1] if (l==1)[/size]
[size=1] {[/size]
[size=1] printf("wrong input! ");[/size]
[size=1] }[/size]
[size=1] }[/size]
[size=1] } [/size]

ארכיון

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

דיונים חדשים