עבור לתוכן

עזרה בשפת C- כתיבת קוד שנותן שגיאה

Featured Replies

פורסם

היי לכולם :)

נתקלתי בשתי בעיות בתוכנה שכתבתי :

בשלב הראשון אני אמורה ליצור תוכנה הקולטת שני מספרים שלמים (מותר להניח שאחד מהם הוא 0), תחילה מחשבת חילוק של שלמים, אחר כך את השארית המתקבלת מהחילוק, ולאחר מכן את החילוק ללא שארית בדיוק של 2 ספרות לאחר הנקודה והתבקשנו להשתמש בDOUBLE. הבעיה היא ששתי הפעולות הראשונות בכתבתי עובדות אך השלישית לא, ניסיתי מלא דברים לעשות ושיניתי מלא פעמים אך שום דבר לא עוזר, לדוגמה כאשר אני מכניסה 10 ו-3, אני מקבל שהתשובה היא 3, למרות שזה לא מה שאמור לצאת בדיוק של 2 ספרות לאחר הנקודה.

בנוסף התבקשתי לאחר מכן לכתוב תוכנה הקולטת אות גדולה ופולטת את הערך האסקי שלה, וזה בכלל לא ברור לי איך לעשות, ניסיתי ככה אבל משום מה זה נותן לי תשובה מבלי שנתן לי להכניס בכלל אות, מה הטעות?

מצורף צילום של הקוד וצילום של הפלט המתקבל.

תודה רבה לעוזרים :yelclap:

פורסם

ואוו, למה צילום במקום cut/paste בכל מקרה, מה קורה עם מדפיסים:

%.2f

?

פורסם

שורה לפני אחרונה

getch ..........

פורסם

שלום דניאל,

בקשר לבעיה הראשונה, היות ושני המספרים num1 ו-num2 הם מטיפוס int אז התוצאה של החילוק שלהם תהיה מטיפוס int (מספר שלם, במקרה שלך 3) ורק בהשמה תהיה המרה לdouble ובגלל זה התוצאה שלך היא מספר שלם עם אפסים אחרי הנקודה.

בשביל לפתור את זה תשתמשי בהמרה:

dou_div = (double) num1 / num2

בקשר לבעיה השנייה, על מנת להמיר לascii תעשי המרה ל-int באותה הדרך שעשינו המרה לdouble למעלה.

בהצלחה.

נערך על-ידי ofekb

פורסם
  • מחבר

תודה רבה לכולם :kiss:

קודם כלתודה אופק זה עבד עכשיו, וגם תודה

needacomp זה עבד עם f.

אז הבעיה הראשונה נפתרה אבל השנייה עדיין לא, ברגע שאני מריצה את התוכנה הוא משום מה לא נותן לי כלל אפשרות להכניס אות..

וגם לא הבנתי כ"כ מה הכוונה בלהשתמש בפונקציה בחלק השני כמו שאמרת, זהמה שניסיתי, איך להמשיך


[/COLOR][/RIGHT]


[LEFT][COLOR=#000000]#include <stdio.h>
int main()
{
int num1,num2,divide,RestDiv;
double dou_div;
char capitalLetter;


printf("Enter 2 numbers while the second number is different than zero \n");
scanf("%d %d", &num1,&num2);
divide=num1/num2 ;
printf("The divide result of the two numbers is (int) : %d \n",divide);
dou_div=(double) num1/num2 ;
RestDiv=num1-divide*num2;
printf("The rest of the division is : %d \n",RestDiv);
printf("The divide result of the two numbers is (double): %8.2f\n",dou_div);

printf("Enter a capital letter \n");
scanf("%c",&capitalLetter);
printf("The ASCII value is : %d\n",(int)capitalLetter);

getch();
return 0;
}
[/COLOR][/LEFT]



נערך על-ידי דניאל3008

פורסם

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

פורסם

אולי צריך להוסיף \n (שורות חדשות) ל sscanf ? כדאי להסתכל על ערך החזרה של הפונקציה שאומרת כמה מהקלט היא הצליחה לקלוט.

פורסם
  • מחבר

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

פורסם

צריך כנראה לסמן את הקוד ואז ללחוץ על זה.

פורסם
  • מחבר

אה סבבה תודה רבה :) עכשיו אנסה, ואגב עשיתי עכשיו מה שאמרת, וזה נותן לי להכניס אות גדולה :) אבל כשהכנסתי את האות A זה נתן לי את המספר 10, זה לא אמור לתת 65?

אגב גם שאני שמה את האות P זה נותן לי עשר, ובחרתי הפעם את המספרים להיות 8 ו-4 כך שזה לא אמור להיות קשור אליהם

תודה לעוזרים :)

נערך על-ידי דניאל3008

פורסם

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

פורסם
  • מחבר

להוסיף עוד כמה מה?

פורסם

\n בין הקלטים ?

פורסם
  • מחבר

מזתומרת? אני לא מבינה ממש איפה אתה מתכוון, מה גורם לבעיה, הנה הקוד העדכני:


[LEFT]#include <stdio.h>
int main()
{
int num1,num2,divide,RestDiv,smallLetter;
double dou_div;
char capitalLetter;


printf("Enter 2 numbers while the second number is different than zero \n");
scanf("%d %d", &num1,&num2);
divide=num1/num2 ;
printf("The divide result of the two numbers is (int) : %d \n",divide);
dou_div=(double) num1/num2 ;
RestDiv=num1-divide*num2;
printf("The rest of the division is : %d \n",RestDiv);
printf("The divide result of the two numbers is (double): %8.2f\n",dou_div);

printf("Enter a capital letter \n");
scanf("%c \n",&capitalLetter);
smallLetter=(int)capitalLetter;
printf("The ASCII value is :%d \n",smallLetter);

getch();
return 0;
}[/LEFT]


תודה רבה :)

פורסם

ב-scanf, שים רווח אחד לפני ה-c%.

בדרך כלל כשאתה קורא קלט באמצעות scanf אז הוא מדלג על כל תווי ה-whitespace (רווח, טאב, ירידת שורה) ורק אז קורא את הקלט. זה נכון לקלטים כמו d% או f%, אבל לא עבור c% - כשאתה עושה scanf עם c% אז זה קורא תו אחד בודד, בין אם הוא רווח או לא.

אם יש רווח בתוך ה-scanf, אז הוא בכל מקרה ידלג על כל הרווחים, גם אם העברת לו c%.

ארכיון

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

דיונים חדשים