2017-02-11 9 views
-4

私はCでプログラミングする方法を勉強しています。ファイルを使用するのに苦労しています。ファイルの特定の部分にアクセスしてCプログラミングで使用するには?

たとえば、2つのファイルがあります。それには1〜10名の生徒の名前と成績があります。 ように:

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

私は与えられた学生から、具体的な数字をアセスするために取得し、例えば番号を追加するにはどうすればよい、私は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)とすべての行に例えばのように、1つの名前と1つのグレードがあります:

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を返します。

関連する問題