파일의 p 번째 레코드와 q 번째 레코드를 바꿀 함수를 작성해야합니다. 파일 이름, p 및 q는이 함수에 전달되어야합니다. 나는 포럼의 톤을 검토 한인덱스가 주어진 텍스트 파일에서 2 줄을 바꿔주는 C 함수
Derrek 123 4.00
Egg 234 3.00
Banana 345 2.00
Griffen 456 1.00
Lucas 987 2.00
:
텍스트 파일 데이터는 학생 (이름, 학생증, GPA) 에뮬레이트 일반적으로 다음과 같이 예정되어있는 구조체의 기반 그리고 자습서 그리고 그것은 내가 각 라인의 길이를 모르는 경우 전체 파일을 읽을 필요가있는 것 같습니다.
가능 : 1.) 전체 파일을 읽지 않고 인덱스로 파일의 2 줄 전체를 읽으십시오. 2.이 두 줄을 스왑하고 파일에 쓰십시오. 1) (이 일 것으로 보인다) 2) 내가 원하는 행을 찾아서에 저장 전체 텍스트 파일을 읽어
그렇지 않으면 내가하는 방법을 알고 내가 좋아하는 것이 스파게티 엉망이 char 내 코드는 그냥 문자열의 길이를 잡는 것 같다. 전체 String을 저장하고 싶습니다. 3.)이 두 문자열 값을 바꿔 넣습니다. 나는 포인터를 사용하여 시도했다. 나는이 잘못을하고 있음을 확신한다. 4.)이 2 개의 문자열 값을 파일의 색인에 씁니다. 이 부분에서는 알려진 인덱스가 주어지면 파일에 p와 q를 쓸 수 있습니까? 아니면 전체 파일을 다시 반복해야합니까?
//Switch Function
struct Student switchRecords(char filename, int p, int q){
//Declare Variables
int c = 0, temp;
char pText, qText;
//Open file
//Read p and q from file
//Store P and q into temporary variables
FILE *fp2 = fopen("student.db", "r");
//Error check
if(fp2 != NULL){
char line[252];//max line size
while(fgets(line, sizeof line, fp2) != NULL){
if(c == p){
pText = puts(line);
c++;
}
else if(c == q){
qText = puts(line);
c++;
}
else{
c++;
}
}
fclose(fp2);
}
else{
printf("Error, File doesn't exist.");
}
//Gets real spaghettii about here
int* pp = pText;
int* qp = qText;
printf("P value b: %d\n", pText);
printf("Q value b: %d\n", qText);
printf("Pp value b: %d\n", pp);
printf("Qp value b: %d\n", qp);
//Swap
temp = *pp;
*pp = *qp;
*qp = temp;
printf("P value a: %d\n", pText);
printf("Q value a: %d\n", qText);
printf("Pp value a: %d\n", pp);
printf("Qp value a: %d\n", qp);
//p = p p^q
//q = p p^q
//p = p p^q
//Write to file - TODO!
}