עבור לתוכן

עזרתכם בקוד ב c שלא עובד

Featured Replies

פורסם

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include <math.h>

#include<stdlib.h>

#include<conio.h>

#define N 4

מבנה מסוג קומפ

typedef struct comp{

float x, y;

}comp;

הכרזה על פונקציות

float CRadius(Complex);

void Error_Msg(char* str);

void InputAndWriteToFile(FILE *f);

int CheckFile(FILE *f, float m);

מיין :

int main(){

FILE *f;

if(!(f=fopen("complex_number.txt", "w+")))

Error_Msg("The output file is worng");

InputAndWriteToFile(f);

printf("\nThere are %d big numbers\n", CheckFile(f, 4));

fclose(f);

_getch();

return 0;

}

פונקציה להודעת שגיאה (לא מגיע אליה בקוד עובד נבדק)

void Error_Msg(char* str){

puts(str);

_getch();

exit(1);

}

פונקציה המחשבת רדיוס באמצעות נוסחת הדיסטנס איקסת וואי ונקודה.(אין בעיה איתה עובדת נבדק)

float CRadius(comp *m){

return (sqrt(pow(m->x, 2) + pow(m->y, 2)));

}

פונקציה המדפיסה ערכים לתוך הקובץ (הפעולה הצליחה ואכן יש לי קובץ עם הערכים המיועדים בתוכו

void InputAndWriteToFile(FILE *f){

int i;

comp z[N];

printf("enter %d complex numbers : ", N);

for (i = 0; i < N; i++)

scanf("%f%f", &z.x, &z.y);

for (i = 0; i < N; i++)

fprintf(f,"%.1f %.1f %.1f\n", z.x, z.y, CRadius(z+i));

}

הפונקציה עמה יש לי בעיה : אמרוה לקלוט מתוך הקובץ איקס ת וואי ורדיוס בפועל לא קולטת רדיוס והוא נשאר על ערך האתחול שלו : 0 תלא מובן לי מדוע אינו מקבל ערכים במהלך הלולאה וכל הזמן נשאר עם הערך 0 על אף שבקובץ יש ערכים ברדיוס

m=4

f - מצביע לתחילת הקובץ

עלי לבדוק כמה פעמים הערך של הרדיוס (ערך המתקבל לאחר דיסטנס איקס וואי) גדול מ4 מתבצע ע"י cnt.

int CheckFile(FILE *f, float m) {

comp z[N];

int i = 0, cnt = 0;

float rad = 0;

for (i = 0; i<N; i++)

{

fscanf(f,"%f%f%f",&z.x,&z.y,&rad);// לא נקלט לי ערכים לתוך רדיוס,רדיוס נשאר 0 ואף פעם לא קטן מ m.

if (rad>m)cnt++;//לכן cnt נשאר 0

}

return cnt;

}

הבעיה : נוצר קובץ , אולם בפונקציה האחרונה זאת שבבולד הfscanf : אמורה לקלוט לתוך rad משתנים דבר אשר לא מתבצע וrad נשאר 0 לאורך כל ההרצה .

תודה מראש לעונים.

נערך על-ידי roi_mal

פורסם

תתחיך בלערוך את ההודעה ולהוסיף תגדים של CODE סביב הקוד כדי שנוכל לקרוא אותו.

פורסם

אני חושב שN שלך לא טוב כי אתה צריך להעביר גודל בנפרד למערך .... לא בטוח לגבי זה

פורסם
  • מחבר

אוקיי אבל הוא משתנה גלובאלי בתוכנית,אני חושב שזה תקין לפעול כך,זה על אותו משקל של להגדיר מערך בגודל 4

פורסם

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <math.h>
#include<stdlib.h>
#include<conio.h>


#define N 4
typedef struct comp{
float x, y;
}comp;
float CRadius(Complex);
void Error_Msg(char* str);
void InputAndWriteToFile(FILE *f);
int CheckFile(FILE *f, float m);

int main(){
FILE *f;
if(!(f=fopen("complex_number.txt", "w+")))
Error_Msg("The output file is worng");
InputAndWriteToFile(f);
printf("\nThere are %d big numbers\n", CheckFile(f, 4));
fclose(f);
_getch();
return 0;
}

void Error_Msg(char* str){
puts(str);
_getch();
exit(1);
}

float CRadius(comp *m){
return (sqrt(pow(m->x, 2) + pow(m->y, 2)));
}

void InputAndWriteToFile(FILE *f){
int i;
comp z[N];
printf("enter %d complex numbers : ", N);
for (i = 0; i < N; i++)
scanf("%f%f", &z[i].x, &z[i].y);
for (i = 0; i < N; i++)
fprintf(f,"%.1f %.1f %.1f\n", z[i].x, z[i].y, CRadius(z+i));
}


int CheckFile(FILE *f, float m) {
comp z[N];
int i = 0, cnt = 0;
float rad = 0;
for (i = 0; i<N; i++)
{
fscanf(f,"%f%f%f",&z[i].x,&z[i].y,&rad);
if (rad>m)cnt++;
}
return cnt;
}


- - - תגובה אוחדה: - - -

איך נראה הקובץ שאתה קולט ?

נערך על-ידי needacomp

פורסם

אתה צריך לעשות rewind(f) לפני שאתה קורא כדי להזיז את הסמן להתחלה. אחרת אתה מנסה לקרוא אחרי איפה שסיימת לכתוב.

ארכיון

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

דיונים חדשים