איך אני יכול לבדוק תקינות קלט בבעיה מסויימת? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


efod26

Recommended Posts

:pissed:

שלום חברים,

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

#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);
}
}

קישור לתוכן
שתף באתרים אחרים

שלום שוב,

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

רק לתזכורת התכנית צריכה לקבל שני תווי 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;
}

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...