【发布时间】:2012-11-28 13:35:20
【问题描述】:
在尝试读/写二进制文件惨遭失败后,我尝试用 fscanf 和 fprintf 做同样的事情,它似乎工作正常,但又一次.. 阅读根本不起作用,我又一次真的不知道为什么:
结构+指针:
typedef struct flug
{
int flugnummer;
char flugziel[50];
enum TAG flugtag;
int flugzeit_stunde;
int flugzeit_minute;
int gateway;
char status[10];
struct flug *next;
}FLUG;
typedef FLUG *ELEM_ZGR;
全局变量:
enum TAG {
Sonntag,
Montag,
Dienstag,
Mittwoch,
Donnerstag,
Freitag,
Samstag
};
static ELEM_ZGR first;
char const datei[] = "ddslist.txt";
写:
int fluege_sichern() {
ELEM_ZGR curr;
FILE *fp;
curr = first;
if (fopen_s(&fp, datei,"a+") != 0)
{
printf("\nDatei %s nicht zum Anhaengen zu oeffnen",datei);
PAUSE;
exit(1);
}
while (curr != NULL) {
fprintf(fp,"%d %s %d %d %d ",
curr->flugnummer, curr->flugziel, curr->flugzeit_stunde, curr->flugzeit_minute, curr->gateway);
fclose(fp);
curr = curr->next;
}
}
阅读:
void fluege_laden() {
ELEM_ZGR curr;
FILE *fp;
int i = 0;
curr = NULL;
if (fopen_s(&fp, datei,"r") != 0)
{
printf("\nDatei %s nicht zum Lesen zu oeffnen",datei);
PAUSE;
exit(1);
}
printf("\n\nArtikelliste\nArtikelnummer Artikelbezeichnung Artikelpreis");
while (fscanf_s(fp,"%d %s %d %d %d ",
&curr->flugnummer, curr->flugziel, &curr->flugzeit_stunde, &curr->flugzeit_minute, &curr->gateway) != EOF)
{
printf("\n%d %s %d %d %d ",
curr->flugnummer, curr->flugziel, curr->flugzeit_stunde, curr->flugzeit_minute, curr->gateway);
if (++i%10==0)
PAUSE;
}
fclose(fp);
}
请帮帮我。即使是一点提示也会有很大的帮助。 [编辑1]
void fluege_laden() {
ELEM_ZGR curr;
FILE *fp;
int i = 0;
curr = (ELEM_ZGR)malloc(sizeof(struct flug));
if (fopen_s(&fp, datei,"r") != 0)
{
printf("\nDatei %s nicht zum Lesen zu oeffnen",datei);
PAUSE;
exit(1);
}
printf("\n\nArtikelliste\nArtikelnummer Artikelbezeichnung Artikelpreis");
while (fscanf_s(fp,"%d %s %d %d %d ",
&curr->flugnummer, curr->flugziel, &curr->flugzeit_stunde, &curr->flugzeit_minute, &curr->gateway) != EOF)
{
printf("\n%d %s %d %d %d ",
curr->flugnummer, curr->flugziel, curr->flugzeit_stunde, curr->flugzeit_minute, curr->gateway);
if (++i%10==0)
PAUSE;
}
fclose(fp);
}
【问题讨论】:
-
我建议对函数使用有用的参数(而不是依赖全局变量),并让它们也返回有用的值。并且:请不要 typedef 指针。它只会让你和其他人感到困惑。 (对于有经验的人来说,'*' 比 FLUGZEUG_ANZEIGER_TYP 更具可读性;
-
我会在应用程序按预期工作后立即执行此操作。 ;)
标签: c printing struct scanf printf