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

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


shai87

Recommended Posts

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

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

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

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

תודה רבה שי!

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

אוקיי אז הצלחתי עם העניין הזה, הבעיה היא שאני מנסה בתרגיל לקבל 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");
}

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

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

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

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

ויש עוד הרבה.

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

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

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

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

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

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

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

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

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

מה שקורה הוא שאני רוצה שאנטר יעבור ללולאה הבאה וזה בסדר, אני מעוניין שהוא יציג לי את השגיאה רק אם יש תו שהוא לא בין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]

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

ארכיון

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

×
  • צור חדש...