פורסם 2010 באוגוסט 615 שנים שלום רב,בקוד הבא על המשתמש לקלוט מקסימום חמישה מספרים מסוג שלם ללא סימן,כאשר הוא מעוניין להפסיק לקלוט מספרים הוא מקיש ENTER.בקוד שכתבתי,כאשר קולטים מהמשתמש מספר וב SCANF רשום %C אז אכן מתבצע BREAK,אך הערך שנקלט ומוכנס למערך המספרים הוא הערך הASSCI שלו וזה לא מה שצריך.כאשר קולטים מהמשתמש מספר בSCANF ואני רושם %D אז לא מתבצע BREAK (לא מזהה את תו הENTER),אבל כן מוצב הערך המספרי במערך המספרים.אנא עזרו לי להבין מה לא עובד בתוכנית! ולמה שאני עושה CASTING על התו כדי שיהיה UNSIGNED זה לא עוזר!תודה רבה!printf("Insert numbers(max 5):\n"); for(i=0;i<MPN_MAX;i++) { fflush(stdin); scanf("%c",&ch); if(ch=='\n') break; else arr_num[i]=(unsigned)ch; } for(j=0;j<i;j++) printf("%u ",arr_num[j]);
פורסם 2010 באוגוסט 615 שנים תווים נשמרים בזכרון תמיד בתור ערך ה-ascii שלהם. ההמרה מ-char ל-int למעשה לא עושה כלום (כי char הוא כבר מספר).לכן, אתה צריך "לתרגם" מערך ה-ascii של הספרה לערך הספרתי שלה. באופן נוח, הספרות '0' עד '9' מסודרות זו אחר זו בקידוד ascii, ולכן בשביל להגיע לערך הספרתי של ספרה מסויימת צריך להחסיר ממנה את ערך ה-ascii של הספרה 0, שהוא '0'.כלומר, בתכלס:arr_num[j] = ch - '0';שוב, שים לב שאין צורך בהמרה, כי כל תו הוא למעשה כבר קבוע מספרי ששווה לערך ה-ascii שלו.
פורסם 2010 באוגוסט 715 שנים מחבר שניצל,מה שאמרת וכתבת תופס כאשר אני מעוניין להכניס ספרות בלבד למערך : מ 0 ועד 9, אבל במידה והמשתמש הכניסמס דו ספרתי לא יהיה ניתן להציבו במערך מכיוון שלמספרים גדולים מ 9 לא קיים ערך ASCII!אשמח לקבל תשובה!
פורסם 2010 באוגוסט 715 שנים מחבר שניצל,אם נקלוט את המספר עם %d, אז כמו שציינתי בפתיח לא נזהה את התו ENTER...
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.