Перевод из С++ в С. Структура "Студент" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Кто подскажет что нужно изменить чтобы перевести этот код на язык С
#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <windows.h>
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
 
using namespace std;
 
char way[80];
char *file;
double x;
int p;
char s;
 
struct student
{
    char fio[50];
    char adr[50];
    int gr;
    double rat;
    void input();
};
 
void tabl()
{
    int z;
    for (z = 0; z<80; z++)
        cout << '-';
}
 
void print(student *s, int n)
{
    int i;
    tabl();
    cout.setf(ios::left);
    cout << '|' << ' ' << setw(22) << "ФИО";
    cout << '|' << ' ' << setw(34) << "Домашний адрес";
    cout << '|' << ' ' << setw(7) << "Группа";
    cout << '|' << ' ' << setw(8) << "Рейтинг";
    cout << '|';
    tabl();
    for (i = 0; i<n; i++)
    {
        cout.setf(ios::left);
        cout << '|' << ' ' << setw(22) << s[i].fio << '|';
        cout << ' ' << setw(34) << s[i].adr << '|';
        cout << ' ' << setw(7) << s[i].gr << '|';
        cout << ' ' << setw(8) << s[i].rat;
        cout << '|';
        tabl();
    }
}
 
void student::input()
{
    cout << "Введите фамилию, имя, отчество студента -> ";
    cin.clear();
    _flushall();
    cin.getline(fio, 79);
    cout << "Введите домашний адрес -> ";
    cin.clear();
    _flushall();
    cin.getline(adr, 79);
    cout << "Введите группу -> ";
    cin >> gr;
    cout << "Введите рейтинг -> ";
    cin >> rat;
}
 
void main()
{   setlocale(LC_ALL, "rus");
    student *s;
    int n, i, o = -1;
    cout << "Введите количество студентов -> ";
    cin >> n;
    s = new student[n];
    for (; o;)
    {
        cout << "1.Ввод с клавиатуры в консольном режиме\n2.Вывод на экран в консольном режиме\n3.Создать файл и записать в него структурированные данные\n";
        cout << "4.Вывести созданный файл на экран\n5.Удалить все элементы у которых рейтинг меньше заданного\n";
        cout << "6.Добавить элемент с заданным номером\n7.Выход\n";
        cout << "\nВыберите нужный вам пункт -> ";
        cin >> o;
        cout << "\n";
        if (o == 1)
        {
            /*cout << "Введите количество студентов -> ";
            cin >> n;
            s = new student[n];*/
            for (i = 0; i<n; ++i)
            {
                s[i].input();
            }
        }
        if (o == 2)
        {
            cout << "\nВведенные данные:\n";
            print(s, n);
        }
        if (o == 3)
        {
            cout << "Введите путь к файлу или название файла для записи в него данных -> \n";
            cin.clear();
            _flushall();
            cin.getline(way, 80);
            ofstream output(way, ios::out | ios::trunc);
            output.setf(ios::left);
            if (!output.is_open())
            {
                cout << "/nОшибка!\n";
                return;
            }
            for (i = 0; i<n; i++)
            {
                output.setf(ios::left);
                output << setw(22) << s[i].fio;
                output << setw(34) << s[i].adr;
                output << setw(7) << s[i].gr;
                output << setw(8) << s[i].rat << "\n";
            }
            output.close();
        }
        if (o == 4)
        {
            cout << "Введите путь к файлу или название файла для чтения из него данных -> \n";
            cin.clear();
            _flushall();
            cin.getline(way, 80);
            ifstream input(way, ios::in);
            const int buffer = 4096;
            file = new char[buffer];
            if (!input.is_open())
            {
                cout << "Ошибка\n";
                return;
            }
            cout << "\nПрочитанные данные из файла:\n";
            tabl();
            while (input.peek() != EOF)
            {
                input.getline(file, buffer);
                cout << file << "\n";
            }
            tabl();
            input.close();
        }
        if (o == 5)
        {
            cout << "Введите путь к файлу или название файла для чтения из него данных\n";
            cin.clear();
            _flushall();
            cin.getline(way, 80);
            ofstream output(way, ios::out | ios::trunc);
            if (!output.is_open())
            {
                cout << "Ошибка\n";
                return;
            }
            cout << "Удалить из файла элементы рейтинг которых меньше -> ";
            cin >> x;
            for (i = 0; i<n; i++)
            {
                if (x<s[i].rat)
                {
                    output.setf(ios::left);
                    output << setw(22) << s[i].fio;
                    output << setw(34) << s[i].adr;
                    output << setw(7) << s[i].gr;
                    output << setw(8) << s[i].rat;
                    output.put(13);
                    output.put(10);
                }
            }
        }
        if (o == 6)
        {
            cout << "Введите путь к файлу или название файла для чтения из него данных\n";
            cin.clear();
            _flushall();
            cin.getline(way, 80);
            ofstream output(way, ios::app);
            cout << "Введите номер элемента, который следует добавить -> ";
            cin >> p;
            student r;
            cout << "Введите фамилию, имя, отчество студента -> ";
            cin.clear();
            _flushall();
            cin.getline(r.fio, 79);
            cout << "Введите домашний адрес -> ";
            cin.clear();
            _flushall();
            cin.getline(r.adr, 79);
            cout << "Введите группу -> ";
            cin >> r.gr;
            cout << "Введите рейтинг -> ";
            cin >> r.rat;
            output.seekp(p * sizeof(s[0]), ios::beg);
            output.setf(ios::left);
            output << setw(22) << r.fio;
            output << setw(34) << r.adr;
            output << setw(7) << r.gr;
            output << setw(8) << r.rat;
 
        }
        if (o == 7)
            return;
    }
    delete[]s;
}
 
}*/

Решение задачи: «Перевод из С++ в С. Структура "Студент"»

textual
Листинг программы
int ch;
int result;
//...
do
{
    printf("Введите количество студентов -> ");
    result = scanf("%d", &n);
    if (1 != result)
    {
        system("CLS");
        printf("Вы ввели не верное значение: ");
        while ((ch = getchar()) != '\n')
            putchar(ch);
        putchar(ch);
    }
} while (1 != result);

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

  1. Объявлены две переменные: ch и result типа int
  2. В теле цикла do-while происходит следующее:
    • Выводится сообщение Введите количество студентов ->
    • Происходит попытка чтения количества студентов с помощью функции scanf, в которую передается адрес переменной n и строка формата %d
    • Если scanf вернула значение 1, то есть количество студентов успешно введено, то цикл прекращается
    • Если scanf вернула значение 0, то есть произошла ошибка при вводе, то выполняется следующий блок кода:
      • Система выводит сообщение Вы ввели не верное значение:
      • С помощью цикла while происходит пропуск символа новой строки, чтобы дать возможность пользователю исправить ошибку ввода
  3. Цикл do-while выполняется до тех пор, пока scanf не вернет значение 1

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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