עבור לתוכן

מה הבעייה בתוכנית?

Featured Replies

פורסם

יש לי תרגיל לכתוב תוכנית שקולטת סידרה של מספרים עם סימנים ביניהם(רק + או -) ומחשבת את תוצאת הסידרה עד שנקלט הסימן *.

יעני

24

+

3

-

7

-

2

*

זה אמור להציג 18...

קיצר ניסיתי לעשות את זה ו:

#include <stdio.h>

#include <conio.h>

int main(){

int num1,num2;

char sign='+';

printf("enter number: ");

scanf("%d",&num1);

while(sign!='*'){

printf("enter number: ");

scanf("%d",&num2);

printf("enter sign: ");

scanf("%c",&sign);

if(sign=='+')

num1=num1+num2;

if(sign=='-')

num1=num1-num2;

printf("enter number: ");

scanf("%d",&num2);

printf("enter sign: ");

scanf("%c",&sign); }

printf("%d",num1);

getch();}

*שיניתי את הסדר קליטת נתונים, בהתחלה עשיתי שזה קולט בחוץ את המספר הראשון ובפנים את הסימן ואחרי זה מספר 2, אבל זה דילג לי משום מה על הקליטה של הסימן אז שיניתי את הסדר...

מה הבעייה? :bash: אני כבר שעה יושב על זה

פורסם

הקוד שלך פשוט לא נכון

למה אותה קולט פעמיים את num2 ואת sign בתוך הלולאה

ולמה בכלל הפכת את הסדר?

פורסם
  • מחבר

כן אני יודע שזה לא נכון... עשיתי פשוט מלא נסיונות ויצא לי סלט.. שנייה אני ירשום פה אחד אחר.. ושינתי את הסדר כי שהרצתי זה עשה לי ככה:

enter number:

הכנסתי ואחרי זה:

enter sign:enter numbe:

יעני זה דילג על הסימן

פורסם

כי כנראה שה-%c קולט את ה-enter שהוכנס אחרי המספר

היה פה פעם דיון על הבעיה הזאת עם פיתרון

אם אני לא טועה אז בכל מקום שאתה מקבל %d תעשה

scanf("%d[glow=red,2,300]\n[/glow]",&num2);

פורסם
  • מחבר

#include <stdio.h>

#include <conio.h>

int main(){

int num1,num2;

char sign;

printf("enter number: ");

scanf("%d ",&num1);

while(sign!='*'){

printf("enter sign: ");

scanf("%c ",&sign);

printf("enter number: ");

scanf("%d ",&num2);

if(sign=='+')

num1=num1+num2;

if(sign=='-')

num1=num1-num2;}

printf("%d ",num1);

getch();}

הנה עשיתי מה שאמרת ועדיין יש לי בעייה:| ניסיתי גם לקלוט את הסימן והמספר השני בסוף וזה גם לא עוזר...

פורסם

scanf("%d\n",&num2);

משום מה את מה שהדגשתי הוא פשוט מחק

תעשה את זה

פורסם

נראה לי הבעיה ב קליטת המספרים. אתה קולט מספר שהוא num1 ומספר שאני שהוא num2 אחרי זה אתה רושם שורה שאני לא הבנית num1=num1+num2 זה קצת דפוק נגיד בחרת מספרים 1 ו 2 תציב יוצא לך 1=1+2

תכניס עוד משתנא שהוא sum ותרשום במקום num1=num1+num2 sum=num1+num2 אותו דבר לגבי חיסור

פורסם
  • מחבר

למה אבל אם אתה עושה

1=2+1

זה יקבל את הערך 3 במקום ה1...

פורסם

MasterDK מה שכתבת מיותר, זה עובד יופי ואפילו עדיף ככה

פורסם
  • מחבר

:nixweiss:

#include <stdio.h>

#include <conio.h>

int main(){

int num1,num2;

char sign;

printf("enter number: ");

scanf("%d\n",&num1);

while(sign!='*'){

printf("enter sign: ");

scanf("%c",&sign);

printf("enter number: ");

scanf("%d\n",&num2);

if(sign=='+')

num1=num1+num2;

if(sign=='-')

num1=num1-num2;}

printf("%d",num1);

getch();}

אמממממ זה לא עזר.. זה עכשיו עובר לקלט הבא רק שאני מכניס 2 מספרים וזה עדיין מדלג על השורה של הסימן

פורסם

MasterDK מה שכתבת מיותר, זה עובד יופי ואפילו עדיף ככה

טעות שלי צודק

פותח התרד אם לא אכפת לך ואתה רוצה אני יכול לפרסם פה את הקוד שלוקח 2 מספרים לוקח סימן + או - ומחשב לפי הסימן את השאר אני מניח תוכל להוסיף לבד

פורסם
  • מחבר

בעיקרון זה לקלוט את המספרים והסימן ואם זה + להוסיף אם מינוס לחסר.. הבעייה שלי פה זה משהו בקליטת הנתונים לא יודע מה :-\

אבל תודה בכל מקרה :yelclap:

פורסם

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

ותסביר בדיוק איפה הבעיה של קליטת הנתונים אם יש אפשרות תביא פלט

פורסם

[tt]

void main(vidid)

{

int x,y;

char sign;

printf("enter x:"\n);

scanf("%d",&x);

printf("enter the sign:");

sign=getchar();

while(sign!='*')

{

printf("enter y:");

scanf("%d",&y);

if(sign =='-')

x=x-y;

else

x=x+y;

printf("enter the sign:");

fflush(stdin); /* flush the keyboard buffer */

sign=getchar();

}

Printf("the total sum is %d",x);

}

[/tt]

זה עובד

פורסם
  • מחבר

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

ktbnus אם אני לא אצליח אני אסתכל על התוכנית שלך :xyxthumbs:

שמתי את ה \n לפני הקליטה של הסימן... ככה:

scanf("\n%c",&sign)

זה עכשיו קולט טוב את המשתנים.. אבל זה לא חוזר על הלולאה.. .שנייה אני ינסה שוב

ארכיון

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

דיונים חדשים