2016-12-14 6 views
-1

人!そこで私は、格納する必要のある情報に基づいて変数を含む構造体を作成し、さまざまな機能を呼び出すメニューを持ち出し、さまざまなことを行うという課題を持っています。問題は何らかの理由で私のcreateFile関数が全く動かず、2日間エラーを探していて、どこから来ているのか分かりません。コンソールアプリのメニューがC言語で動作しません

私がまだ取り組んでいるようにchangeStud関数を無視してください。私は、ファイルの名前を入力した後、そのファイルの番号を選択してファイルを作成したいだけです。

struct Student { 
char ime[50]; 
char fn[10]; 
int ocfiz, ocmat, ocpro; 
}ps; 

か:私はあなたがこのようなあなたの構造体変数を使うべきだと思う

#define _CRT_SECURE_NO_WARNINGS 
#include "stdafx.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

struct Student { 
    char ime[50]; 
    char fn[10]; 
    int ocfiz, ocmat, ocpro; 
}; 
char filename[20]; 

FILE *fd; 

Student ps; 

void createFile() { 
    fd = fopen(filename, "wb"); 
    fclose(fd); 
    printf("File created!\n"); 
} 

void readStud(Student *s) { 
    printf("Enter data for new student"); 
    getchar(); 
    printf("Enter student name:"); 
    gets_s(s->ime); 
    printf("\nEnter FN:"); 
    scanf_s("%s", s->fn); 
    printf("\nEnter marks for Maths, Programming, Physics"); 
    scanf_s("%d %d %d", &s->ocmat, &s->ocpro, &s->ocfiz); 
    getchar(); 
} 
void addStud() { 
    fd = fopen(filename, "a+b"); 
    char c; 
    do { 
     readStud(&ps); 
     fwrite(&ps, sizeof(ps), 1, fd); 
     printf("More Students? (y/n) : "); 
     c = getchar(); getchar(); 
    } while (c == 'y'); 
    fclose(fd); 
} 

void writeAllStud() { 
     fd = fopen(filename, "rb"); 
     printf("students in file\n"); 
     fread(&ps, sizeof(ps), 1, fd); 
     while (!feof(fd)) { 
      printf("%s fn: %s ocmat: %d ocpro: %d ocfiz: %d", ps.ime, ps.fn, ps.ocmat, ps.ocpro, ps.ocfiz); 
      fread(&ps, sizeof(ps), 1, fd); 
     } 
     fclose(fd); 
}/* 
void changeStud() { 
    char fn2[50]; 
    printf("enter FN:"); 
    gets_s(fn2); 
    fd = fopen(filename, "r+b"); 
    fread(&ps, sizeof(ps), 1, fd); 
    while (!feof(fd)) { 
     if (strcmp(ps.fn, fn2)==0) { 

      fseek(fd, -(long) sizeof(ps), SEEK_CUR); 
      fwrite(&ps, sizeof(ps, 1, fd)); 
      break; 
     } 
    } 
}*/ 

void Avg() { 

} 

void exportData() { 
    FILE *txt; 
    txt = fopen("students.txt", "wt"); 
    fd = fopen(filename, "rb"); 
    fread(&ps, sizeof(ps), 1, fd); 
    while (!feof(fd)) { 
     fprintf(txt, "%s %s marks fiz%d mat%d prog%d\n", ps.fn, ps.ime, ps.ocfiz, ps.ocmat, ps.ocpro); 
     fread(&ps, sizeof(ps), 1, fd); 
    } 
    fclose(fd); 
    fclose(txt); 
    printf("students have been written to a text file.\n"); 
} 
void main() { 
    printf("Enter file name:"); 
    gets_s(filename); 
    int c; 
    do { 
     printf("\nMenu:\n"); 
     printf("0 Exit\n"); 
     printf("1 Create file\n"); 
     printf("2 Add new student data\n"); 
     printf("3 Change data from FN\n"); 
     printf("4 AVG marks for maths, programming, physics\n"); 
     printf("5 export all AVG marks to .txt file\n"); 
     scanf("%d", &c); 
     switch (c) { 
     case 1: createFile; break; 
     case 2: addStud; break; 
     //case 3: changeStud; break; 
     case 4: Avg; break; 
     case 5: exportData; break; 
     } 
    } while (c != 0); 
} 
+1

"私の' createFile'関数は動作していません " - 正確には何が働いていないのですか? –

+1

半関連の注記:ユーザは 'void main'をしないでください。それは 'int main'です – UnholySheep

+0

それは私が理解できないものです。コード通りです。正しいです。ここで私が試した入力です。名前を入力して「1」を入力すると、「File created」と表示され、ソリューションのフォルダにIファイルが表示されます。問題はちょうどループです。私がそれらを呼び出すとき、他の機能と同じです。 ここに例があります - http://i.imgur.com/zl4UkzR.png –

答えて

0

を(私の場合>>それだけでメニュー機能をループ1を入力してください>ファイル名を入力し、それがファイルを作成する必要があります)

struct Student ps; 

だけではなく、学生のPSの使用、またはあなたがfunctinで構造体を渡すメインfunction..Andでそれをdecleareできること

です
void readStud(struct Student *s)() { 
//your code... 
} 
+0

@UnholySheepはすでに私の問題を発見しました。私のコードはフロッピーですが、問題は私の関数を正しく呼び出さないということでした。私は彼らに電話したいときに私の主な機能で "()"を忘れてしまった。それでも私はあなたが言ったことを取ってそれを修正します。どうもありがとう :) –

関連する問題