Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2023, 19:23   #1
alonil
Пользователь
 
Регистрация: 14.01.2023
Сообщений: 38
По умолчанию Вывести данные о каждом студенте.

Не выводятся данные
Код:
#define _CRT_SECURE_NO_WARNINGS 1
#include <windows.h> 
#include <iostream>
#include <fstream>// для работы с файлами
#include <cstring>
#include <cstdlib>// преобразователь строки в число
using namespace std;
int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	const int l_surname = 8, l_birthday = 8, l_mathematics = 1, l_russian = 1, l_informatics = 1, l_buf = l_surname + l_birthday + l_mathematics + l_russian + l_informatics;
	struct Student
	{
		char surname[l_surname + 1];
		char birthday[l_birthday + 1];
		int mathematics;
		int russian;
		int informatics;
	};
	const int l_dbase = 7;
	Student dbase[l_dbase];														//база данных для семи человек
	char buf[l_buf + 1];												//буфер,куда вводится строка из файла
	ifstream fin("Students.txt");												//ввод строк файла в буфер
	if (!fin) { cout << " Ошибка открытия файла "; system("pause"); return 1; }
	int i = 0;														//номер человека в списке
	while (fin.getline(buf, l_buf))													// пока строки поступают в буфер фиксированной длины
	{																		// заполняем наш список, только "компьютерзированный"
		strncpy(dbase[i].surname, buf, l_surname);						//копируем в i-тый пункт списка, в этом пункте заполняем поле Фамилия (беря с начала буфера строку фиксированной длины под Фамилию, длина указана выше константным значением)
																		//strncpy(куда копировать;откуда копировать;какой длины брать)
		dbase[i].surname[l_surname] = '\0';								//(индексирование ведется с нуля)  в конец строки добаляем символ конца строки
		strncpy(dbase[i].birthday, &buf[l_surname], l_birthday);		// в том же пункте заполняем поле День Рождения,при этом делаем ссылку на место с которого нужно продолжить считывать нужное
																			//указываем именно ссылку,так как нам нужен символ , с которого нужно продолжить считывать,а не его адрес (как бы это было с указателем)
		dbase[i].birthday[l_birthday] = '\0';											//так как это опять строка,то заканчиваем её "нуль-символом"
		dbase[i].mathematics = atoi(&buf[l_surname + l_birthday]);									// atoi - преобразует строку в целочисленный формат
																						// в нашем случае прописано,что её считывать после фамилии и дня рождения
		dbase[i].russian = atoi(&buf[l_surname + l_birthday + l_mathematics]);
		dbase[i].informatics = atoi(&buf[l_surname + l_birthday + l_mathematics + l_russian]);
		i++;																					// сменяем пункт,переходим на заполнение анкетных данных следующего человека
	}
																												//Выведем на экран то,что у нас получилось
	for (int j = 0; j < l_dbase; j++)
	{
		cout << "Данные студента № " << j << endl;
		fin >> dbase[j].surname;																							// с помощью fin мы так указали порядок считывания информации
		fin >> dbase[j].birthday;
		fin >> dbase[j].mathematics;
		fin >> dbase[j].russian;
		fin >> dbase[j].informatics;
		cout << "Фамилия: " << dbase[j].surname << endl << "Дата рождения: " << dbase[j].birthday << endl << "Математика: " << dbase[j].mathematics << endl << "Русский: " << dbase[j].russian << endl << "Информатика: " << dbase[j].informatics << endl;
	}
	fin.close();
	return 0;
}
Вот текст файла:
Иванов 23.03.2005 5 5 4
Петров 06.01.2004 3 2 4
Сидоров 07.03.2004 4 4 5
Симонов 04.06.2005 3 4 3
Богданов 05.12.2004 5 5 5
Куркин 16.07.2004 2 2 2
Измайлов 28.09.2005 3 4 5

Последний раз редактировалось alonil; 06.05.2023 в 19:27.
alonil вне форума Ответить с цитированием
Старый 06.05.2023, 20:54   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,551
По умолчанию

Ну и где вопрос? Или это - "смотр наших достижений" ?
digitalis вне форума Ответить с цитированием
Старый 06.05.2023, 20:55   #3
alonil
Пользователь
 
Регистрация: 14.01.2023
Сообщений: 38
По умолчанию

Уже не нужно,всё исправлено.Спасибо.
alonil вне форума Ответить с цитированием
Старый 06.05.2023, 20:57   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,551
По умолчанию

Ну так чтоб польза была для других: обычно оповещают - в чём были глабли и как с ними справился.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан текст. Вывести буквы, являющиеся одинаковыми и стоящие на одном и том же месте в каждом слове Madiso Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2018 20:40
Расположить данные в таблице по классам,а в каждом классе упорядочить фамилии в алфавитном порядке lirika123 Паскаль, Turbo Pascal, PascalABC.NET 0 14.05.2017 15:09
дано матрицу 5 на 8 .вывести на экран минимальное значение в каждом ее столбцу. vova_makr Помощь студентам 3 30.09.2015 12:37
вывести нажатую клавишу при каждом сканировании клавиатуры Dzef Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 01.03.2011 17:22