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

Объяснение кода листинга программы

  1. Структура tov объявлена для хранения информации о студентах, включая фамилию и оценки по трём предметам.
  2. В функции main используется цикл while, который продолжается до тех пор, пока пользователь не введёт команду для выхода из программы (команда 0).
  3. В начале каждой итерации цикла while пользователю предлагается выбрать команду (1 или 2), и ввод этой команды проверяется на корректность.
  4. Если выбрана команда 1, вызывается функция addFile, которая добавляет новые записи в файл.
  5. Если выбрана команда 2, выполняется операция чтения файла (что именно делает эта операция, не указано).
  6. В функции addFile открывается файл для добавления новых записей.
  7. Пользователю предлагается ввести количество новых записей, которые он хочет добавить.
  8. Для каждой новой записи запрашиваются фамилия студента и оценки по трём предметам.
  9. После ввода всех данных для новой записи она записывается в файл.
  10. В функции readFile на данный момент ничего не происходит, поэтому она просто возвращает 0.

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы