עבור לתוכן

איך אני יכול לבדוק תקינות קלט בבעיה מסויימת?

Featured Replies

פורסם

:pissed:

שלום חברים,

יש לי בעיה קלה, אני צריך לכתוב תכנה דיי בנאלית שאמורה לקלוט מהמשתמש שני תווים char והיא צריכה

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

קלט תקין יחשב רק כאשר הוכנס תו בוצע רווח אחד ואז תו שני.

ניסיתי לשבור את הראש ולא הגעתי לפתרון

מי יוכל לעזור בדחיפות תודה רבה

פורסם

תריץ על הקלט LOOP שבודק שבכל המקומות האי זוגיים יש תוו ובכל המקומות הזוגיים יש רווח (אסקי מס' 32)

פורסם

ערוך בבקשה את הכותרת כך שתכיל את תמצית השאלה.

פורסם
  • מחבר

תודה על התגובה המהירה,

אבל איך אני בודק את אותם מקומות?

ז"א איך תראה השורה שבודקת?

פורסם

במקום לקלוט שני תווים, קלוט שלושה תווים.

בדוק אם השני שנקלט הוא רווח, בצע את החישוב על הראשון והשלישי.

פורסם
  • מחבר

ניסיתי, לא ממש הלך אתה יכול לכתוב פה רק את

השורת קוד הספיציפית?

פורסם
  • מחבר

תראה איך נראה מה שכתבתי:

#include<stdio.h>

int main()

{
int hefresh=0;
char tav1,tav2,space;


printf("Enter Two Chars:\n");
scanf("%c%c%c",&tav1,&space,&tav2);
if (space!='32')
printf("sorry wrong char");

else
{
hefresh=tav1-tav2;

if (hefresh<0)
hefresh=hefresh * (-1);

printf("The result is:%d\n",hefresh);
}
}

פורסם

ערוך את ההודעה ותעטוף את הקוד שלך בטג קוד (כפתור # למעלה) כדי שיהיה קריא.

בכל מקרה, הביטוי '32' לא תקין. או שתתייחס לרווח כתו (כלומר ' ') או שתתייחס אליו כמספר (32, ללא גרשיים).

פורסם
  • מחבר

תוקן,

בסדר ככה?

פורסם

יותר טוב. בכל מקרה, שים לב להערה בפוסט הקודם שלי.

חוץ מזה, אם התכנית לא מתקמפלת לך, תאמר גם מהי הודעת השגיאה. אנחנו לא צריכים לנחש.

פורסם
  • מחבר

ממש תודה זה עבד עם (' ')

פורסם
  • מחבר

שלום שוב,

תודה על העזרה מאתמול אך כבר שסיימתי לכתוב ובדקתי שעובד התעוררה בעיה אחרת,

רק לתזכורת התכנית צריכה לקבל שני תווי char מהמשתמש ולחשב את הפרש האסקי.

הבעיה היתה בבדיקת הקלט, התכנית שעזרת לי איתה אתמול היתה נכונה חלקית משום שהיא לא יכלה לשלול מצב שבו המשתמש מקיש הרבה תווי רווח ואז רק

את התו הנכון:

עכשיו אמרו לי שאפשר לפתור זאת אם מחליפים את פקודת הסקאן אפ לגטצ'אר אבל עדיין לא תקין בבקשה עזרה

#include<stdio.h>

int main()

{
int hefresh=0;
char tav1,tav2,space; /*הצהרה על משתנים*/

printf("Enter Two Chars:\n"); /* בקשת קלט מהמשתמש*/
getchar("%c",&tav1); /*קריאת שני התווים ותו הרווח*/
getchar("%c",&space);
getchar("%c",&tav2);
if(space!=' ') /* בדיקת קלט ותגובת קלט שגוי*/

printf("Error! Wrong Typing\nPlease Try Again\n");
else
{
hefresh=tav2-tav1; /* חישוב ההפרש*/

if (hefresh<0) /*תנאי אם ההפרש שלילי הצג ערך מוחלט*/

hefresh=hefresh * (-1);

printf("The result is:%d\n",hefresh); /* הצגת התוצאה */

}

}

פורסם

כמה דברים:

א. כבר אמרתי לך קודם - אל תגיד סתם "לא תקין", אלא תרשום מה השגיאה שהקומפיילר מציג לך.

ב. חפש בגוגל איך משתמשים ב-getchar. קוראים לה באופן שונה מאיך שקוראים ל-scanf.

ג. scanf (בקריאת תו בודד) עושה בדיוק אותו דבר כמו getchar. מבחינת התוצאה, זה לא משנה באיזו מהן תשתמש. מומלץ להשתמש ב-getchar, אבל מסיבות אחרות. מי שאמר לך שאפשר לפתור אם תחליף את הפקודה טעה.

ד. כל מה שאתה רוצה לבדוק הוא שהתו השני הוא רווח, והתווים הראשון והשלישי אינם רווח. זה אמור להיות די פשוט.

פורסם
  • מחבר

הלו,

תדוה על התגובה, שאלא עובד אני מתכוון שלא מתקבלת התוצאה לא מבחינת קופילציה אלא מבחינת הפלט,

בכל אופן ככה זה כן עובד:

#include <stdio.h>

int main()
{
char ch1,ch2,ch3;
int diff;

printf("Please enter 2 chars seperated by one space [char1<space>char2]: ");
ch1 = getchar();
ch2 = getchar();
ch3 = getchar();
if ( ch2 == 32 )
{
if ( getchar() == 10 )
{
diff = ch3 - ch1;
if ( diff < 0 ) diff = diff * -1;
printf("The difference in ASCII values of the chars is: %d\n",diff);
return 0;
}
}
printf("Invalid input, Try again.\n");
return 0;
}

ארכיון

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

דיונים חדשים