파일에서 텍스트를 읽고 구조체로 분해하고 특정 조건에 맞게 섹션의 유효성을 검사 한 다음 두 개의 새 파일을 생성하는 프로그램을 작성해야합니다. 하나는 오류가있는 데이터이고 다른 하나는 오류가있는 데이터입니다. 지금까지 나는 파일에서 데이터를 분리하여 구조체에 저장하는 단계에 이르지만 처음 두 변수에서만 작동합니다. 텍스트는 콜론으로 분리하고, I는 변수 노호로 각 섹션을 넣어야하는 텍스트 파일 여기C에서 파일의 구조체 메모리 할당 두 변수 만 작동합니다.
0001:0002:0003:0021:CLS
예 내 구조체이다
벨로 그러나 미세 whatworks이다struct packet{
int source;
int destination;
int type;
int port;
char data[50];
};
곧 타입 변수에 데이터를 추가하는 다른 섹션을 추가하면 프로그램이 작동하지 않습니다.
fscanf(inFile, "%[^:]: %[^:]:", records[i].source, records[i].destination);
printf("%d - %s _ %s", i+1, records[i].source, records[i].destination);
그러나 이것은 작동하지 않으며 필요합니다. 나는 그것을 확장해야한다.
fscanf(inFile, "%[^:]: %[^:]: %[^:]:", records[i].source, records[i].destination, records[i].type);
printf("%d - %s _ %s _ %s", i+1, records[i].source, records[i].destination, records[i].type);
}
난 아무것도 fscanf 기능에 문제가 그렇게 생각 메신저를 저장되지되고 있기 때문에 내가 기대하는대로 null을 표시하는 구조체에 아무것도 입력하지 않고는 printf합니다. 처음 두 가지로 작동하므로 구문 문제이므로 메모리 문제 여야합니다. 나는 malloc과 realloc을 사용했지만 필자는 그것과 혼동하여 내가 올바르게하지 않았 음을 확신한다.
전체 코드 목록은
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//declaration of function which will print my name and student number
const char * myname();
//declaration of a function that will prompt a user to enter a file and open it if it exists
int openfile();
struct packet{
int source;
int destination;
int type;
int port;
char data[50];
};
int main()
{
int recordCount = 0;
struct packet *records;
records =malloc(sizeof(struct packet));
// printing the my name and student number via the myname function
printf("%s\n", myname());
//executing the openfile function that will open a function
openfile(recordCount, records);
return 0;
}
const char * myname()
{
const char *x = "*************************\nUSERNAME\nUSER NUMBER\nCONTACT NUMBER\n*************************\n";
return x;
}
int openfile(int rCount, struct packet *records)
{
//file pointer which will keep track of the file being accessed
FILE *inFile ;
//creating variable that will hold what the user has entered for a filename to open
char inFileName[100] = { '\0'};
printf("Please Enter the File to open:");
//getting the users input and storing it into the variable just created
scanf("%s", inFileName);
//if the file does not exist, display an appropriate error message
if ((inFile = fopen(inFileName, "r")) == NULL)
{
printf("Cannot Open File **%s**\n", inFileName) ;
exit(1) ;
}
else {
//if the file does exist, process the data
while(fgets(inFileName, 100, inFile)!=NULL)
{
int i =0;
for (i=0; i<30;i++)
{
fscanf(inFile, "%[^:]: %[^:]: %[^:]:", records[i].source, records[i].destination, records[i].type);
printf("%d - %s _ %s _ %s", i+1, records[i].source, records[i].destination, records[i].type);
}
}
//close the file
fclose(inFile);
return 0;
}
};
감사합니다. 나는 병이 다시 시작된다고 생각한다. – user3262678