פורסם 2014 בנובמבר 1411 שנים #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=4f - מצביע לתחילת הקובץעלי לבדוק כמה פעמים הערך של הרדיוס (ערך המתקבל לאחר דיסטנס איקס וואי) גדול מ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 לאורך כל ההרצה .תודה מראש לעונים. נערך 2014 בנובמבר 1511 שנים על-ידי roi_mal
פורסם 2014 בנובמבר 1411 שנים תתחיך בלערוך את ההודעה ולהוסיף תגדים של CODE סביב הקוד כדי שנוכל לקרוא אותו.
פורסם 2014 בנובמבר 1511 שנים אני חושב שN שלך לא טוב כי אתה צריך להעביר גודל בנפרד למערך .... לא בטוח לגבי זה
פורסם 2014 בנובמבר 1511 שנים מחבר אוקיי אבל הוא משתנה גלובאלי בתוכנית,אני חושב שזה תקין לפעול כך,זה על אותו משקל של להגדיר מערך בגודל 4
פורסם 2014 בנובמבר 1511 שנים #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include <math.h>#include<stdlib.h>#include<conio.h>#define N 4typedef 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;}- - - תגובה אוחדה: - - -איך נראה הקובץ שאתה קולט ? נערך 2014 בנובמבר 1511 שנים על-ידי needacomp
פורסם 2014 בנובמבר 2111 שנים אתה צריך לעשות rewind(f) לפני שאתה קורא כדי להזיז את הסמן להתחלה. אחרת אתה מנסה לקרוא אחרי איפה שסיימת לכתוב.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.