2016-12-14 63 views
-1

伙计!所以我有一个任务来创建一个结构,该结构包含基于我需要存储哪些信息的变量,并提供调用不同功能并执行不同操作的菜单。问题在于,由于某种原因,我的createFile函数根本无法工作,而且我一直在寻找2天的错误,并且我根本无法找到它来自哪里。控制台应用程序菜单不工作在C

忽略changeStud函数,因为我仍在处理它。我只是想为我输入名称时创建我的文件,然后选择该函数的编号。 (在我的情况>输入文件名>输入1>它只是循环菜单功能,它应该创建一个文件)

#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”,它应显示“文件已创建”,我应该看到我在解决方案的文件夹中存档。问题是它只是循环。当我给他们打电话时,其他功能也一样。 这是一个例子 - http://i.imgur.com/zl4UkzR.png –

回答

0

我认为你应该使用你的结构变量是这样的:

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

或使用

struct Student ps; 

而不只是学生的PS,也可以在传递一个结构的载体作用主要function..And decleare是

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

@UnholySheep已经发现我的问题。我的代码是软盘,但问题是我没有正确调用我的功能。当我想给他们打电话时,我在主要功能中忘了“()”。不过,我会采取你所说的并修复它。非常感谢 :) –