2017-03-28 6 views
-1

私はC言語を新しくしました。学生データを収集するコードを書いていましたが、問題はほとんどありません。ファイルを読み込んでいません。新しい行に追加されます。私は間違って何をしていますか?Cでファイルを読み込んで追加する

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

int giveChoiceForFileOpenType(); 
void WriteFile(); 
void ReadFile(); 
void ApendFile(); 
void printChoices(); 
int openFileFromConsole(FILE *fp1); 
void saveStudentGradeInfoTofile(FILE *fp1); 

typedef struct student { 
    char name[50]; 
    char id [20]; 
    int score; 
}student; 


int main() { 


    printChoices(); 
    int choice = giveChoiceForFileOpenType(); 

    switch(choice){ 
    case 1: WriteFile(); 
     break; 
    case 2: ReadFile(); 
     break; 
    case 3: ApendFile(); 
     break; 
    default: printf("Error!!!\n"); 
    } 


    return 0; 
} 


void WriteFile(){ 
    FILE *fp1 =fopen("E://registry.csv", "w"); 
    openFileFromConsole(fp1); 
    saveStudentGradeInfoTofile(fp1); 
    fclose(fp1); 

} 
void ReadFile(){ 
    FILE *fp2 = fopen("E://registry.csv", "r"); 
    openFileFromConsole(fp2); 

    fclose(fp2); 
} 

void ApendFile(){ 

    FILE *fp3 = fopen("E://registry.csv", "a"); 
    openFileFromConsole(fp3); 
    saveStudentGradeInfoTofile(fp3); 
    fclose(fp3); 

} 
void printChoices(){ 

    printf("1.Write\n"); 
    printf("2.Read\n"); 
    printf("3.Append\n"); 
    return; 
} 

int giveChoiceForFileOpenType(){ 

    int choice; 
    printf("Select fileopen type:"); 
    scanf("%d",&choice); 
    return choice; 

} 

int openFileFromConsole(FILE *fp1){ 

    if(fp1 == NULL ) 
    { 
     printf("Error!"); 
     return 0; 
    } 
    return 1 ; 
} 
void readingDataFromFile(){ 



} 

void saveStudentGradeInfoTofile(FILE *fp1) 
{ 

    int numOfStudent ; 
    student s[100]; 
    printf ("Get the number of students :"); 
    scanf("%d",&numOfStudent); 

    for(int i = 0; i < numOfStudent; i++) { 


     printf("\nEnter ID number:"); 

     scanf(" %s",s[i].id); 

     printf("Enter name: "); 
     scanf("%s,",s[i].name); 

     printf("Enter score: "); 
     scanf("%d",&s[i].score); 

     fprintf(fp1,"%s, %s, %d",s[i].id,s[i].name,s[i].score); 

     printf("\n"); 

    } 
} 
+1

「ファイルを読み取っていません」???ファイルの内容を印刷するようにコンピュータに指示することは決してありません。それでなぜそれが期待されますか? – ForceBru

+0

@ForceBruおそらく、OPはデバッガや別のツールを使ってファイルを読み込んでいますか? IACは、コードthatsは、批評家のために良いだろう印刷します。私はこのコードがOPの記入を意味するスタブコード(OPの著作者ではない)であると思われます。 – chux

答えて

1

あなたが別の行にあなたの出力を入れたい場合は、あなたがこの

fprintf(fp1,"%s, %s, %d\n",s[i].id,s[i].name,s[i].score); 
1

のようなあなたのフォーマット文字列で\n文字で追加する必要があり、私は私があれば、誰かが私を修正します確信していますここで間違っていますが、あなたがfopenを使用した後は、ファイルで何かをしているようには見えません。

ReadFile()に電話すると、fopenにファイル名と読み取りモードが使用されますが、これは問題ありません。その後、openFileFromConsole(fp2)が呼び出されますが、その機能は呼び出し元関数に対してreturn 1となり、ファイルを閉じます。

私が何かを見逃してしまったら、誰かが訂正すると確信しています。

+0

絶対に正しいです。 'fopen'は魔法の関数ではありません。単にファイルを開き、何も読み書きしません。 – ForceBru

+0

@ForceBruこれは私が考えたものです。私は実際にこのファイルを読んでいたければ、OPが 'fgetc'または' fgets'でループを組み込む必要があると思います。 – JLW

関連する問題