Создание меню в консоли - C (СИ)
Формулировка задачи:
не могу понять почему не хочет работать программа при заходе в 1 case
что пропустил ?
#include <stdio.h> #include <conio.h> int main () { int diya; do { printf("1- Добавление в файл\n"); printf("2- Обработка файла\n"); printf("0-Выход\n"); scanf("%i\n", &diya); if(diya == 0) break; switch(diya) { case 1: { struct tov {char last_name[10]; int predmet1; int predmet2; int predmet3;} x, x1; FILE *f; if ((f=fopen("D:\\reyting.txt", "wb"))==NULL) { printf("Невозможно открыть файл.\n"); } else printf("Файл відкритий\n"); int z=0; printf("Введите количество добавляемых записей\n"); scanf("%i", &z); printf("\t\tДобавление записей про студентов:\n"); do { //printf("\tВведите данные про студента\n"); printf("Фамилия:\t"); scanf("%s",&x.last_name);; printf("Введите оценки по 3 предметам:\n"); scanf("%d",&x1.predmet1); scanf("%d",&x1.predmet2); scanf("%d",&x1.predmet3); fwrite(&x,sizeof(x),1,f); z--; } while (z==0);//getch()!=27 fclose(f); } break; case 2: { ; } break; default: printf("Не выбран ни один из пунктов текстового меню"); break; } } while(true); return 0; }
Решение задачи: «Создание меню в консоли»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> struct tov { char last_name[10]; int predmet1; int predmet2; int predmet3; }; int viewMenu(char *fname); int addFile(char *fname); int readFile(char *fname); int main(int argc, char * argv[]) { int ch; char *fname = "students.db"; while(viewMenu(fname) && scanf("%d", &ch) && ch != 0){ switch (ch) { case 1: addFile(fname); break; case 2: printf("2\n"); break; } } return 0; } int viewMenu(char *fname) { FILE *fp; int count =0, flag = 0; struct tov some; if (!(fp=fopen(fname, "r"))) flag = 0; else{ while(!feof(fp)){ fread(&some, sizeof(some),1,fp); count++; } flag = 1; } fclose(fp); if (flag) printf("Количество записей %d\n", count); else printf("файл не создан\n"); printf("1- Добавление в файл\n"); printf("2- Обработка файла\n"); printf("0-Выход\n"); printf("Ваш выбор: "); return 1; } int addFile(char *fname) { FILE *fp; struct tov newstr; int count=0; if(!(fp=fopen(fname, "ab"))){ // open to append new records postition file move to end file printf("error open %s file\n", fname); exit(1); } printf("File %s success opened\n", fname); while(printf("Количество новых записей [0 - exit]: ") && scanf("%d", &count) && count != 0 ){ int x = 0; for(; x<count; x++){ printf("Добавление новых записей \n"); printf("Фамилия:\t"); scanf("%s",newstr.last_name);; printf("Введите оценки по 3 предметам:\n"); scanf("%d",&newstr.predmet1); scanf("%d",&newstr.predmet2); scanf("%d",&newstr.predmet3); fwrite(&newstr,sizeof(newstr),1,fp); } } fclose(fp); return 0; } int readFile(char *fname) { return 0; }
Объяснение кода листинга программы
- Структура
tov
объявлена для хранения информации о студентах, включая фамилию и оценки по трём предметам. - В функции
main
используется циклwhile
, который продолжается до тех пор, пока пользователь не введёт команду для выхода из программы (команда 0). - В начале каждой итерации цикла
while
пользователю предлагается выбрать команду (1 или 2), и ввод этой команды проверяется на корректность. - Если выбрана команда 1, вызывается функция
addFile
, которая добавляет новые записи в файл. - Если выбрана команда 2, выполняется операция чтения файла (что именно делает эта операция, не указано).
- В функции
addFile
открывается файл для добавления новых записей. - Пользователю предлагается ввести количество новых записей, которые он хочет добавить.
- Для каждой новой записи запрашиваются фамилия студента и оценки по трём предметам.
- После ввода всех данных для новой записи она записывается в файл.
- В функции
readFile
на данный момент ничего не происходит, поэтому она просто возвращает 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д