2017-02-11 1 views
-4

C로 프로그래밍하는 법을 배우는 중이며 파일을 사용하는 데 어려움을 겪고 있습니다.파일의 특정 부분을 액세스하여 C 프로그래밍에서 사용하는 방법?

어떻게 할 수 있습니까? 두 개의 파일이 있습니다. 그것에 1 명에서 10 명의 학생까지 이름과 등급이 있습니다. 처럼 :

John 10  John 5 
Alex 6  Alex 9 
Mary 8  Mary 6 

어떻게 주어진 학생에서 특정 번호를 ACESS 예를 들어 숫자를 추가 할 수 나는 fseek과, SEEK_END를 사용해야 할, 또는 내가 ftell은 사용해야합니까? 그리고 모두의 중앙값을 취하시겠습니까?

코드는 어떻게 작성해야합니까?

EDIT1 : 하나의 파일 (ARQ, aluno이

enter code here 


#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

typedef struct{ 

char nome[30]; 
float media; 
char situacao; 

}informa; 
// function to create files \/ 
int cria_arquivo(){ 
    informa A; 
    char nome[30]; 
    float n1, n2; 
    `FILE *arq1, *arq2, *arq3, *arq4; //pointers to archives students, grades,` and anothe file to print on 

    arq1 = fopen("alunos.txt","r"); // students and grades 
    arq2 = fopen("notas1.txt","r"); 
    arq3 = fopen("notas2.txt","r"); 
    arq4 = fopen("turma.dat", "wb"); 


    if((arq1 == NULL) || (arq2 == NULL) || (arq3 == NULL) || (arq4 == NULL)){ 
     printf("FATAL ERROR - NAO E POSSIVEL ABRIR ARQUIVOS"); //cant open the files 
     exit(1); 
    } 

    while(1){ 
     //printf("ola"); 
     fscanf(arq1, "%s", nome); 
     printf("%s\n", nome); 



     if (feof(arq1)) { 
      break; 
     } 
     //printf("Funciona"); 

     fscanf(arq2, "%f", &n1); 
     fscanf(arq3, "%f", &n2); 


     strcpy(A.nome, nome); 

     A.media = (n1+n2)/2; 
     printf("%f\n", A.media); 

     if(A.media < 5){ 
      A.situacao = 'F'; 
     } 
     else{ 
     A.situacao = 'A'; 
     } 

     fwrite(&A, sizeof(informa), 1, arq4); 
    } 
    fclose(arq1); fclose(arq2); fclose(arq3); fclose(arq4); 
    return 0; 
} 

int main(){ 
    cria_arquivo(); 

    return 0; 

} 
+0

함께 작업하는 파일은 멋지게 구조화 된 텍스트 파일입니다. 'fscanf'에 대해 읽고 그것을 사용하십시오. – DyZ

+0

당신이 무엇을 요구하고 있는지 불분명합니다. 또한 데이터가 어떻게 보이는지는 분명하지 않습니다. 이것은 숙제와 같아 보이지만, 문제에 대해 더 분명히하고, 문제를 해결하기 위해 이미 수행 한 작업을 명확하게해야합니다. –

+0

텍스트 파일의 요소는 일반적으로 가변 폭 *이므로 텍스트 파일의 경우 데이터의 특정 위치를 찾는 것이 불가능합니다. 텍스트 파일의 경우 일반적으로 전체 파일을 읽어야하며 원하는 파일이 발견 될 때까지 각 레코드를 구문 분석해야합니다. –

답변

0

나는 당신의 질문에 대해 좀 혼란 스러워요하지만 가정 : 내가 뭘하려 (포르투갈어의 변수에 대한 미안, 나는 몇 가지 의견을 추가) .txt)로 모든 라인에, 예를 들어처럼 하나의 이름과 하나 개의 등급이있다 :

Lukas 10 
    Matthias 8 
    Sven 5 
    Fernando 10 

그리고 당신은 싶어 당신이 이런 식으로 뭔가를 할 수 단지 페르난도 등급을 알고

#include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 

    int main() { 
     FILE *arq; 
     arq = fopen ("aluno.txt", "rt"); 
     if (arq == NULL) { 
     printf ("ERRO 404\n"); 
     } 
     char name[50]; 
     int grade; 
     while (fscanf (arq, "%s %d\n", &name, &grade) != EOF) { 
      if(name = "Fernando"){ 
      //do what you want 
      if(grade < 6){ 
       printf("Not good Fernando"); 
      } 
      } 
     } 
    } 

이 방법에 대한 좋은 점은 한 줄씩 실행되고 각 줄의 이름과 등급이 끝까지 표시된다는 것입니다. fscanf() 함수는 모든 행의 정보를 가져온 다음 파일의 끝이 EOF이면 다음 줄로 이동하고 EOF를 반환합니다.

관련 문제