עבור לתוכן

בעיה עם פוינטרים

Featured Replies

פורסם

שלום, הקוד הבא אמור לקבל מהמשתמש 3 תווים או מספרים ולתת את הגבוה, יש איתו בעיה בפלט ובעיה בקלט התווים

אולי בקשה גדולה מידי אבל מישו יכול להגיד לי מה הבעיה???

#include<stdio.h>

#define SIZE 3

void main_1(int *n ,int ar[] ,int ar2[],int *d);
void read_num(int ar[], int n);
void read_ab (char ar2[], int n);
void max_num(int ar[] ,int n ,int *d);
void max_ab(char ar2[] ,int n ,int *d);


int main()
{
int d ,x = 0;
int a[SIZE];
char b[SIZE];

printf("For Num Check Press 1\nFor letters press 2\n");
scanf("%d",&x);
main_1(&x,a,b,&d);

}

void main_1(int *n ,int ar[] ,int ar2[] ,int *d)
{
switch (*n)
{
case 1 : read_num(ar ,SIZE ,&d);
break;
case 2 : read_ab(ar2 ,SIZE ,&d);
break;
default : printf("Error Input\n");
}
}

void read_num(int ar[] ,int n ,int *d)
{
int i;
printf("enter 3 numbers\n");
for(i = 0; i < n; i++)
{
scanf("%d",&ar[i]);
}
max_num(ar ,SIZE ,&d);
}

void read_ab(char ar2[] ,int n ,int *d)
{
int i;
printf("enter 3 letters\n");
for(i = 0; i < n; i++)
{
scanf("%c",&ar2[i]);
}
max_ab(ar2 ,SIZE ,&d);
}



void max_num(int ar[] ,int n ,int *d)
{
int i ,temp = ar[0];

for (i = 1; i < n; i++)
{
if(ar[i] > temp)
{
*d = ar[i];
temp = ar[i];
}
else
{
*d=temp;
}
}
printf("\nThe Maximum Number Is: %d \n",d);
}

void max_ab(char ar2[] ,int n ,int *d)
{
int i ,temp = ar2[0];

for (i = 1; i < n; i++)
{
if(ar2[i] > temp)
{
*d = ar2[i];
temp = ar2[i];
}
else
{
*d=temp;
}
}
printf("\nThe Maximum letter Is: %c \n",d);
}

פורסם

void main_1(int *n ,int ar[] ,int ar2[] ,int *d)

בשורה הזאת , d מוגדר כ pointer ל int, בתוך ה CASE אתה שולח את &d, מה שאומר שאתה בעצם שולח את הכתובת של d,

בשורה void read_num(int ar[] ,int n ,int *d) אתה מגדיר את d שוב כ Pointer ל INT, כאשר בפועל אתה שולח pointer ל pointer ל Int.

הבעייה הזאת מופיעה אצלך כמה פעמים.

פורסם
  • מחבר

מה שאתה אומר שאני לא צריך את הכתובת של D אלא את הערך?

פורסם

כן. בשלב שאתה שולח אותו, הערך שלו זה כבר כתובת.

פורסם
  • מחבר

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

את התכנית למרות שאמור לרוץ ולקלוט 3 תווים

פורסם

השורה הזאת

scanf("%d",&ar);

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

פורסם
  • מחבר

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

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

כמקס' ויוצא החוצה.

פורסם

כשאתה קולט CHAR, האנטר שאתה מקיש בסוף גם נקלט כתו. תנסה למצוא דרך להתעלם ממנו.

פורסם
  • מחבר

טוב, אולי פתרון דבילי אבל הגדלתי את מערך הצ'ארים ל-6 והקלט שלי יהיה בשורה אחת :a b c לדוג', ככה הרווחים לא יחשבו..

פורסם

גם פתרון, אבל מה אם אתה תצתרך לקלוט 5 תווים? 10? 100?

תנסה לשנות את הלולאה המקורית, כל שתתעלם מתו שנקלט במידה והוא תו "סתמי" ( רווח, אנטר, טאב וכו'.. ).

או את זה

http://clang.eitan.ac.il/index.php?doc=chp&id=4

פורסם
  • מחבר

ז"א- לדוג' אם נקלט הערך האסקי של אנטר (10 או 32 אם אני זוכר נכון) אז לדלג על האיטרציה?

ארכיון

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

דיונים חדשים