Перевод из С++ в С. Структура "Студент" - 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);
Объяснение кода листинга программы
- Объявлены две переменные:
ch
иresult
типаint
- В теле цикла
do-while
происходит следующее:- Выводится сообщение
Введите количество студентов ->
- Происходит попытка чтения количества студентов с помощью функции
scanf
, в которую передается адрес переменнойn
и строка формата%d
- Если
scanf
вернула значение 1, то есть количество студентов успешно введено, то цикл прекращается - Если
scanf
вернула значение 0, то есть произошла ошибка при вводе, то выполняется следующий блок кода:- Система выводит сообщение
Вы ввели не верное значение:
- С помощью цикла
while
происходит пропуск символа новой строки, чтобы дать возможность пользователю исправить ошибку ввода
- Система выводит сообщение
- Выводится сообщение
- Цикл
do-while
выполняется до тех пор, покаscanf
не вернет значение 1
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д