בעיה ב C

MaD-d0g

New member
בעיה ב C

שלום לכולם יש לי בעיה בקטע קוד הבא
char memoName[8]; int select; select =menu(); printf("Enter the name of memo that you want to add or edit \n"); gets(memoName); printf ("memoName=%s\n", memoName); gets(memoName); printf ("memoName=%s\n", memoName);​
אחרי הקריאה לפונקציה Menu, הקומפיילר כאילו "מדלג" על ה gets הראשון על המסך רואים רק את התוצאה של ה Printf, במקרה הזה:
memoName=​
ואז הוא קולט.. הקוד של הפונקציה Menu מצורף
int menu() { int Select; do { gotoxy(26,12); printf("wellcom to the main program"); gotoxy(26,13); printf("============================"); gotoxy(26,16); printf("1. show a memos"); gotoxy(26,18); printf("2. delete a memo "); gotoxy(26,20); printf("3. add/edit a memo"); gotoxy(26,22); printf("4. exit"); gotoxy(26,24); printf("enter your selection "); scanf("%d",&Select); } while (!(Select >=MIN_OPTION) || !(Select<=MAX_OPTION)); return Select; }​
מישהו יכול לעזור לי ? תודה
 

MaD-d0g

New member
אממ עליתי על באג ../images/Emo35.gif חחח

ננסה לפשט את הבעיה במקרה הזה זה גם לא עובד
printf("Input a number\n"); scanf ("%d",&select); printf("Input a string\n"); gets(memoName); printf ("memoName=%s\n", memoName);​
אז מה שקורה זה.. שאחרי scanf, הפונקציה gets לא עובדת טוב.. (יוו.. אני מקווה שאני משתמש נכון ב gets, אחרת אני אצא מזה מפגר
)
 

eyalbd

New member
כן, באג שלך ../images/Emo13.gif

תראה, ביקשת מscanf לקרוא מספר וזה מה שהיא עשתה. היא לא ניקתה את stdin מקלט נוסף כי לא ביקשו ממנה. מה שאומר שנשאר לך "זבל" או אולי newline בסוף הקלט והוא זה שמקלקל לך את הgets הראשון. כדי לפתור את הבעיה תצטרך לנקות את הקלט עד ל EOF (ע"י getchar למשל). אלטרנטיבה שניה היא לקרוא את הקלט עם fgets ואז לקלוט את המספר ע"י sscanf.
 
זה לא באג

זה מתועד בפונקציות. אתה אמנם צריך לנקות את BUFFER הקלט, אבל יש פקושה עבור זה:flush.
 
למעלה