שאלה בקשר לקבצים בC

pitzpooch

New member
שאלה בקשר לקבצים בC

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

HaRmosh

New member
השאלה לא מובנת...

מה זאת אומרת לעדכן מחרוזת ? לשנות מחרוזת שנמצאת כבר בקובץ ? לכתוב משהו במקומה ?
 

pitzpooch

New member
אוף עם התפוז הארור הזה

נגיד יש לי מס' טלפון ואני רוצה לרשום מס' אחר במקומו
 

vinney

Well-known member
שאלה נגדית

איך אתה חושב שהמחשב ידע שבקובץ שלך יש מספרי טלפון, ולא מספרים אישיים של שוטרים בסינגפור? מחשב לא ידע, ולא משנה לו. אתה משתמש בקובץ כחבית שאתה זורק לתוכה ביתים וקורא ממנה ביתים, הדבר היחיד שאתה יכול לעשות בחבית חוץ מלקרוא ולכתוב - להזיז את הנקודה ממנה אתה קורא בתוך החבית (פונקצית ה SEEK).
 

pitzpooch

New member
כן, אבל לא ממש הבנתי

יש לי ככה: fscanf(fin,"%s %s %s",d.tz,d.name,d.tel) (ש D זה מבנה) ועכשיו אחרי שפתחתי את הנתונים אני צריך לשנות את הנתון של מס' הטלפון, איך אני יודע היכן אני נמצא?
 

vinney

Well-known member
אתה לא עובד נכון

קודם כל תבדוק איך עובדים עם scanf, מה שכתבת יצור לך באג מאוד קריטי (שבטח גם תתקל בו), אלא אם כן הגדרת את D כאוסף מחרוזות עם גודל מוקצה מראש (קשה לי להאמין
)
 

pitzpooch

New member
למה אני לא עובד נכון?

אני ארשום לך פה את הקוד במלואו, זו לא תוכנית ארוכה במיוחד, כל מה שאני צריך לעשות זה לקבל ת.ז. וטלפון, ואם ת.ז. קיימת בקובץ אז להחליף את הטלפון (בקובץ יש ת.ז. , שם וטלפון בסדר הזה) #include<stdio.h> #include<conio.h> #include<string.h> typedef struct { char tz[10]; char name[21]; char tel[10]; }det; int main() { char strtz[10],strtel[10]; FILE *fin, *fout; det d; clrscr(); if((fin=fopen("c:\\det.txt","r+t"))==NULL) { return 1; } puts("tz"); gets(strtz); puts("tel"); gets(strtel); puts(""); while((fscanf(fin,"%s %s %s",d.tz,d.name,d.tel))>0) { if(strcmp(d.tz,strtz)==0) { fseek(fin,-1L*(sizeof(d.tel)),SEEK_CUR); fprintf(fout,"%s",strtel); } printf("%s \n",d.tz); printf("%s \n",d.name); printf("%s \n",d.tel); puts("--------------"); } if(!fclose(fin)){return 1;} getch(); } אני חושב שזה די מובן, ואם לא אז תאמר לי מה לא
בתודה מראש
 

vinney

Well-known member
כמה דברים

אתה כותב לFOUT בלי לפתוח אותו אתה קורא לתוך מערך CHAR בלי לוודא שלא תגלוש מעבר לזכרון המוקצה כשאתה מנסה לדרוס בתוך הקובץ את מספר הטלפון, אתה עקרונית עושה נכון, אבל אתה לא מתחשב במצב בו המחרוזת החדשה תהיה בגודל שונה מהישנה, כשאתה משתמש ב fprintf כמו שאתה משתמש, המחרוזות יהיו באורך משתנה. זה בעיה בIO מהסוג הזה.
 
למעלה