עבור לתוכן

עזרה בשפת C

Featured Replies

פורסם

נתקעתי בעניין די עקרוני.. שימו לב לקוד הבא(לקוח מויקי-ספר), הלולאה DO-WHILE, עובדת היטב כאשר מדובר במשתנה, תנאי, שהוא int. למשל, התנאי להמשך הלולאה הנוכחית הוא שהמשתנה c, הקלט, יהיה הספרה 1. עכשיו, אם אני מנסה להגדיר משתנה מסוג char לדוגמא (נניח שהתנאי לעצירה יהיה:"Please enter 'q' to quit..) קוראת תופעה די מוזרה: השורה: printf("Please enter 'q' to repeat, any other number to quit.\n"); מודפסת, אך אין אפשרות לבצע את הקלט שאמור להגיע לאחריה. מה שקורה זה שהקוד רץ שוב, ללא אפשרות להזין קלט שיהווה תנאי להרצתו שוב. מה יכולה להיות הסיבה לבעיה? שמתי לב שהבעיה נובעת משימוש במשתנה char, אך אינני מבין מדוע הדבר אמור להפריע..


#include <stdio.h>

int main()
{
int c;

do
{
int a, b;

printf("Please enter two numbers with a space between them:\n");
scanf("%d %d", &a, &b);

if( a > b)
printf("%d is bigger than %d.\n", a, b);
else if ( a < b )
printf("%d is bigger than %d.\n", b, a);
else
printf("The numbers are equal.\n");

printf("Please enter 1 to repeat, any other number to quit.\n");
scanf("%d", &c);
}
while(c == 1);


fflush(stdin);
getchar();
return 0;
}

פורסם
  • מחבר

מה שקורה כאן למשל, שברגע שאני רוצה להקליט קלט מסוים, אני משתמש בהוראה:scanf("%c",

&quit);, אבל בפועל, בהרצה, אין לי שום אופציה לעשות שימוש בהוראה הזו! :kopfpatsch:



#include <stdio.h>

int main()
{
char
quit;

do
{
int a,
b;

printf("Please enter two numbers with a space
between them:\n");
scanf("%d %d", &a,
&b);

if( a >
b)
printf("%d is bigger than %d.\n", a,
b);
else if ( a < b )

printf("%d is bigger than %d.\n", b, a);

else
printf("The numbers are
equal.\n");

printf("Please enter 'q' to quit,
any other char to continue.\n");
scanf("%c",
&quit);
}
while(quit !=
'q');


fflush(stdin);
getchar();

return 0;
}

פורסם

אם לא לחצת על q, תתקע בלולאה אינסופית בwhile.

בנוסף, מבנה ה if else שלך לא ברור. במקרה הזה יהיה עדיף להשתמש בswitch case.

פורסם
  • מחבר

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

יותר מזה, הקוד הזה עובד מצויין כשמדובר במשתנים מסוג int, כך שאין ממש קשר לעניין השימוש בתנאי הif if else וכד'. הבעיה שלי נובעת מהשימוש במשתנה מסוג char, ואני ממש לא מצליח להבין איך השימוש במשתנה מהסוג הזה אמור לשנות משהו.. :kopfpatsch:

פורסם

כשאתה קורא לתוך int אז הקריאה מפסיקה בדיוק אחרי שהמספר נגמר. כשאתה קורא לתוך char אז נקרא תו אחד בדיוק, בלי לדלג על רווחים וירידות שורה. אני מניח שאחרי שהכנסת את המספרים לחצת אנטר, ככה שמה שנכנס לתוך quit הוא התו של ירידת שורה ('n\').

הפתרון הוא לשים רווח אחד לפני ה-c% (דהיינו "c% " במקום "c%"). זה גורם ל-scanf לדלג על כל ה-whitepsaces (רווחים, טאבים וירידות שורה) לפני שהיא קוראת את התו.

פורסם
  • מחבר

ענק, תודה רבה, הפתרון עובד! :jump: (אם כי לא הייתי עולה על זה לבד לעולם, למה הכל חייב להיות כלכך מסובך :bash: ..)

רק עוד שאלה קטנה:אמנם כשאני מקיש 'q', ולוחץ "Enter" אני מצפה כי התוכנית תסגר, אך מה שקורה בפועל-שאחרי הלחיצה על 'q' ומקש האינטר, התוכנית יורדת שורה, ורק כאשר אני לוחץ שוב על אינטר, התוכנית נסגרת. מה יכולה להיות הסיבה לדבר? :nixweiss:

ארכיון

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

דיונים חדשים