Создание меню в консоли - 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.