파일에서 형식의 데이터를 읽을 C에서 fscanf 사용하지만어떻게이 데이터를 읽고 구조체의 배열에 넣어하려는
#include<stdio.h>
struct book {
char bookName[50];
char authorName[50];
long price;
int year;
}
main() {
FILE *data;
data=fopen("library.txt", "r");
if (data == NULL) {
printf("File Could not be opened!\n");
}
else {
struct book myBook;
struct book books[20];
int n=0;
while (!feof(data))
{
fscanf(data,"%s***%s***%d***%d\n",&myBook.bookName,&myBook.authorName,&myBook.price,&myBook.year);
books[n]=myBook;
n++;
}
int i;
for(i=0;i<n;i++){
printf("%s - %s - %d - %d \n",books[i].bookName,books[i].authorName,books[i].price,books[i].year);
}
}
}
를 작동하지 않고 출력은
C - b - 0 - 232159429
programing***Fatemeh - b - 0 - 232159429
Kazemi***15000***1391 - b - 0 - 232159429
C - b - 0 - 232159429
programs***Ali - b - 0 - 232159429
Ahmadpour***20000***1392 - b - 0 - 232159429
Programing***Mona - b - 0 - 232159429
Ghassemi***25000***1389 - b - 0 - 232159429
C - b - 0 - 232159429
programing - b - 0 - 232159429
(advanced)***Sara - b - 0 - 232159429
Hamidi***40000***1385 - b - 0 - 232159429
입니다
하지만 내 실제 데이터는
C programing***Fatemeh Kazemi***15000***1391
Cprograms***Ali Ahmadpour***20000***1392
Programing***Mona Ghassemi***25000***1389
C programing (advanced)***Sara Hamidi***40000***1385
어떻게해야합니까
입니까? fscanf는 공백으로 만 작동하지만 내 데이터를 분리하려면 ***을 사용해야합니다.
큰 문제 중 하나는' "% s"'형식이 * 공백으로 구분 된 * 문자열을 읽는다는 것입니다. 또 다른 문제는 루프 상태에서 feof()를 사용해서는 안된다는 것입니다 (http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong). 세 번째 문제는 [fscanf'] (http://en.cppreference.com/w/c/io/fscanf) *가 무엇을 반환하는지 확인하지 않는 것입니다. 네 번째는 배열에 대해 주소 & 연산자'&'를 사용하지 말아야한다는 것입니다 ('& myBook.bookName'에서와 같이). –
@ usr2564301 형식 지정자 외부에 없습니다. 형식 문자열에서'*'는 입력에서 리터럴'* '과 일치하지만 예를 들어. ''% * s "'는 완전히 다른 무언가입니다. –
fscanf (데이터, "% s *** % s *** % d *** % d \ n", & myBook.bookName, & myBook.authorName, & myBook.price, & myBook.year); – ali