21-12-2009, 20:44
|
|
|
|
חבר מתאריך: 21.12.04
הודעות: 30,021
|
|
אם אתה רוצה שבזמן הריצה, המערכת תודיע לך על שגיאה בהכנסת הקלט, ואתה לא יכול להרשות לעצמך להקליד 5 תווים, אתה לא יכול להשתמש ב scanf.
נסה להשתמש ב getchar.
הפונקציה הזו תחכה לקלט של תו בודד ותכניס אותו לתוך משתנה מסוג char. אפשר להכניס לתוך מערך של charים ובכך לוודא כי גודל הקלט הוא לא מעל 4.
תוכל להגדיר כך שכאשר מוכנס התו הרביעי, התוכנית אוטומטית תמשיך הלאה מבלי לחכות ל ENTER, או שהתוכנית תחכה דווקא ל ENTER ואז תבדוק שהתו-האחרון הוא באמת ENTER.
כך גם תוכל לבדוק שהתו הראשון אינו אפס, ולא רק שתוכל לבדוק את זה, אתה תוכל אפילו לזרוק הודעת שגיאה במידה ונלחץ אפס, והתוכנית תחזור למצב קבלת הקלט - או תצא מהפעולה.
תוכל אפילו לנהל בעצמך שימוש ב backspace אם תרצה, ולאפשר מחיקה של תו, או לא לאפשר מחיקה ולקבוע את ההקשה על מקש backspace כאילו הוא תו לכל דבר... תוכל לוודא את תקינות הקלטים בכל לחיצה ולחיצה וללודא כי הן בטווח שבין '0' ל- '9'.
פונקציה קטנה שכתבתי עבור פרוייקט ב ++C, אשר אמורה לקבל ססמא מהמשתמש. כל לחיצה שומרת את התו במחרוזת ולאחר סיום ההקשה, היא משווה את הקליטה עם הקוד שכתוב במערכת ובודקת האם הססמא נכונה או לא, ומחזירה ערך בוליאני בהתאם (true / false).
קוד PHP:
bool password () { char temp, input[60]; int i , flag=1, count = 0; cout << "\nEnter password\n"; while (count < 3) { cout << "\nAttempt #" << count + 1 << ": [ ]"; for (i = 0 ; i < 9 ; i++) cout << (char)8; // move cursor to begining of password i = 0; while (flag && i < 9) // while didn't press enter or enterred more than 9 chars { temp = getch (); if (temp == 13) // 13 = '\n' in ASCII { flag = 0; input[i] = '\0'; } else if (temp == 8) // 8 = backspace in ASCII { if (i) { cout<<temp; cout<<" "; cout<<temp; i--; if (i < 0) i = 0; } } else { input[i++] = temp; cout<<"*"; } } if (i == 9) // printing overwritten `]' due to 9 chars { cout << (char)8 << "]"; } if (!strcmp (input , "password")) return true; else { cout << "\nError! Wrong password\n" << (char)7; count++; flag = 1; } } return 0; }
זה לא הכי 'תקני' להשתמש ב getch או getchar, אבל הן עושות יופי של עבודה, ובשביל עבודות קטנות לביצפר / אוניברסיטה - הן אחלה פונקציות שבעולם ^_^
|