2016-12-14 62 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已經發現我的問題。我的代碼是軟盤,但問題是我沒有正確調用我的功能。當我想給他們打電話時,我在主要功能中忘了「()」。不過,我會採取你所說的並修復它。非常感謝 :) –