עבור לתוכן

לולאה ב C

Featured Replies

פורסם

למה הקוד הבא מבצע את הprintf פעמיים לפני השהוא מבצע scanf נוסף ?

#include <stdio.h>
int main()
{
char selection;
do
{
printf("enter a character:\n");
scanf("%c",&selection);
}while(selection!='e');
return 0;
}

פורסם

אני לא ממש מבין בזה אבל נתקלתי במשהו דומה פעם. תנסה לקרוא לפונקצייה flushall() לפני הscanf.

פורסם

אני לא מבין בזה ממש (למדתי C באופן בסיסי לפני 6 שנים בערך וולא השתמשתי בזה ממש)

אבל נראה לי שאתה יכול להכניס WILE עם משתנה בשם I שגודל כל פעם ב1 ותנאי שכל עוד ן גדול או שווה ל1

שהוא יבצע את ה SCANF ואז I יתחיל עם ערך של 1 בתור דיפולט ואחרי פעם אחת הוא יגדל ב 1 (יהיה בעל ערך של 2 ) ואז התנאי ישבר ולא יתבצע עוד SCANF

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

פורסם

למה הקוד הבא מבצע את הprintf פעמיים לפני השהוא מבצע scanf נוסף ?

בגלל שאתה קולט אות אחת רק, אבל בשביל לסיים את הפקודה אתה לוחץ ENTER, שמכניס בעצם עוד אות בפעם הבאה (אות של שורה חדשה).

פורסם

היי,

תכניס :


#include <stdio.h>

int main()
{
char selection;
do
{
printf("enter a character:\n");
scanf("%c",&selection);
fflush(stdin);
}while(selection!='e');
return 0;
}

פורסם

תוסיף getchar()

כמו כאן:

#include <stdio.h>
int main()
{
char selection;
do
{
printf("enter a character:\n");
scanf("%c",&selection);
getchar();
}while(selection!='e');
return 0;
}

פורסם

אחרי הscanf הראשון נותר לך קוד של NEWLINE בבאפר של stdin

הscanf השני מתבצע,אבל אם תבדוק טוב טוב,תראה שהוא מכניס 10 (הקוד ASCII של שורה חדשה) לתוך המשתנה שלך.

כמו שאמרו לעיל,אתה צריך לנקות את הבאפר לפני כל קריאה ל scanf - בעזרת fflush.

אגב:תזהר משימוש בflushall,הוא מאפס את כל הבאפרים הפתוחים בתוכנית שלך - זה יכול להיות מאוד מסוכן אם אתה מבצע flushall שיש לך קובץ פתוח בתוכנית

ארכיון

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

דיונים חדשים