פורסם 2011 בדצמבר 1513 שנים שלום אני מנסה לכתוב מערך הקולט מספר גדול לדוגמא 40 ספרות, כל ספרה צריכה להיכנס לאיבר במערך.הבעיה היא שאין רווחים בין ספרה לספרה ככה שכל ניסיון ללולאה עם SCANF נותן לי שהמערך מנסה לקלוט את כל המספר בין 40 התווים.ניסיתי עם CHAR אבל זה נראה לי ממש לא הכיוון...אשמח לרעיון כלשהו לביצוע הדבר.תודה רבה שי!
פורסם 2011 בדצמבר 1513 שנים מחבר אויי אני כל כך מטומטם איך אני נתקע על דבר שלמדתי בשיעור ראשון... תודה יואב!!
פורסם 2011 בדצמבר 1513 שנים מחבר אוקיי אז הצלחתי עם העניין הזה, הבעיה היא שאני מנסה בתרגיל לקבל 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");}
פורסם 2011 בדצמבר 1513 שנים כשמנסים לקרוא מספרים באמצעות scanf אז הוא אוטומטית מדלג על כל תווי ה-whitespace (רווחים, ירידות שורה, טאבים וכד'). הדרך היחידה לא לדלג עליהם היא באמצעו c% (לקרוא תו בודד) או s% (לקרוא מחרוזת).אתה קורא ספרות לתוך מערך של int, אז איך אתה מצפה שהמערך יכיל את התו 'n\'?
פורסם 2011 בדצמבר 1513 שנים מחבר ניסיתי גם עם CHARאמרתי לו שהתו צריך להיות בין 0-9, אז למה שאני לוחץ אנטר הוא ממשיך עם הלולאה?מה שמוזר שהוא יפסיק עם 2 הלולאות ברגע שמספר התווים יהיה שווה לN שהגדרתי.אך שמתי תנאי לכל לולאה שהוא ימשיך רק אם בין 0-9char 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");}
פורסם 2011 בדצמבר 1513 שנים כשאתה קורא מספרים בתור char אז הם לא יהיו 0 עד 9, הם יהיו התווים '0' עד '9'.
פורסם 2011 בדצמבר 1513 שנים מחבר כשאני שם גרש וגרש לידע הספרות זה אפילו יותר גרוע ובכלל לא מתחיל לרוץ...אני באמת לא יודע איפה אני טועה
פורסם 2011 בדצמבר 1513 שנים אז תנסה לדבג ולראות מה הבעיה. שים breakpoint בתחילת הלולאה, תלך צעד אחר צעד ותבדוק מה המערך מכיל בכל רגע נתון.
פורסם 2011 בדצמבר 1513 שנים אם אתה רוצה לקרוא את הכל לתוך מערך, אתה יכול להשתמש בכמה אופציות:1. שימוש בGETCH בלולאה כדי לקבל את התווים ואז עד שאתה מגיע לתו של אנטר. ולהשתמש בATOI להפוך כל סיפרה למספר לשים במערך.2. אתה יכול לקבל את המספר הגדול כולו דרך SCANF עם %s ואז להשתמש בATOI על כל תו בנפרד ולהעביר אותו למערך של INTים.ויש עוד הרבה.
פורסם 2011 בדצמבר 1513 שנים לא מומלץ להשתמש ב-getch, כי היא קוראת ישירות מהמקלדת בלי חוצץ, וזו גם לא פונקציה סטנדרטית. עדיף להשתמש ב-getc/fgetc או scanf עם c%.וגם לא באמת צריך להשתמש ב-ATOI עבור ספרה אחת בלבד, זה overkill. אפשר פשוט לחסר '0'.
פורסם 2011 בדצמבר 1513 שנים מחבר איך בדיוק אני עושה את זה?הוא קולט דרך scanf וc% משתנים, אני לא מצליח לגרום לו לצאת עם ENTER עדיין,גם לא הבנתי מה לשים בתנאי, אם המערך [arr[i שווה ל משהו בתוך גרשיים? בלי גרשיים?
פורסם 2011 בדצמבר 1513 שנים מחבר כל הבלאגן בתוכנית התחיל כשעברתי לchar אי אפשר לעשות את זה עם איניג'רים, והשוואה לEOF או משהו בסגנון הזה?
פורסם 2011 בדצמבר 1813 שנים מחבר אני עדיין תקוע בתוכנית הזאת, אני מאוד קרוב לסיום.מה שקורה הוא שאני רוצה שאנטר יעבור ללולאה הבאה וזה בסדר, אני מעוניין שהוא יציג לי את השגיאה רק אם יש תו שהוא לא בין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]
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.