У меня есть эта функция здесь, которая считывает файл в формате:входной файл читается с фантастическими персонажами
(badgeno)
(name)
(location) // until it hits *
(birthday)
Я добавил запись в текстовый файл, как это с помощью программы: Примечание: Я проверил файл после закрытия программы, и он был написан именно так, прежде чем я снова открою программу.
5432
Janna Wind
3321 Jupiter St
44324, Fi, CA
*
1990
Однако, когда я открываю программу и распечатать запись он показывает, как:
5432
Janna Wind
!34^&32()93321 Jupiter St
44324, Fi, CA
1990
И когда я проверяю текстовый файл я сохранил его в после закрытия программы, казалось, это:
5432
Janna Wind
!34^&32()93321 Jupiter St
44324, Fi, CA
*
1990
Я предполагаю, что там должно быть что-то не так с моим «While (fgets ...» для размещения, но я не могу понять, почему Странные символы означает свои данные для чтения с адреса, который. Я не назначал o Что-то вроде этого? Извините, если я запутаюсь.
int readfile(struct test ** start, char filename[]){
FILE *fp = NULL;
fp = fopen(filename,"r");
int badgeno;
char fullname[45];
char location[100];
int birthday;
char line[80];
int opened = 1;
if (fp == NULL){
opened = 1;
} else {
opened = 0;
while (fscanf(fp, "%d\n", &badgeno) > 0) {
fgets(fullname, 45, fp);
strncpy(location, line, sizeof(line));
while (fgets(line, 80, fp)) {
if (strcmp(line, "*\n") == 0) {
line[0] = '\0';
break;
}
strncat(location, line, 79 - strlen(location));
}
fscanf(fp, "%d[^\n]", &birthday);
addRecord(start, badgeno, fullname, location, birthday);
}
}
fclose(fp);
return opened;
}
Я знаю, что мой код грязный, поэтому, пожалуйста, извините меня. Но да, что может привести к появлению этих странных персонажей, когда я снова открою программу. Возможно ли, что моя линия fgets - это проблема в коде?
«Я знаю, что мой код грязный, поэтому, пожалуйста, извините меня». Вы знаете, что это грязно, потом исправить это, не извиняйтесь. –
'fscanf (fp,"% d [^ \ n] ", & birthday);' → 'fscanf (fp,"% d ", & birthday);' –