Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача по С++ > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
nas09
По каждому сотруднику вводится следующая информация:
• Фамилия, имя, отчество;
• год и дата рождения;
• пол;
• стаж работы по специальности;
• домашний адрес;
• телефон;
• должность;
• оклад.

Информация о сотрудниках фирмы хранится в файле workers.dat.

помогите исправить, пожалуйста вот эту ошибку....
http://i010.radikal.ru/0905/d0/69978df9d0e1.jpg


#include "stdafx.h"
#include "iostream"
#include<conio.h>
#include<stdio.h>

using namespace std;

struct WK
{
char fio[30];
int year;
char pol[20];
int stag;
char adres;
int phone;
char dolg;
int oklad;
};
WK mas[10];//массив типа WK

//Пpоцедуpа ввода в базу
WK init (WK wk)
{
cout<<"Vvedite familiyu, imya, otchestvo:"<<endl;
cin.getline(wk.fio,30);//считать стpоку длиной 30 символов

cout<<"Vvedite god i datu rozhdeniya:"<<endl;
cin>>wk.year;

cout<<"Vvedite pol:"<<endl;
cin>>wk.pol;

cout<<"Vvedite stag raboty po specialnosti:"<<endl;
cin>>wk.stag;

cout<<"Vvedite domashniy adres:"<<endl;
cin>>wk.adres;

cout<<"Vvedite telefon:"<<endl;
cin>>wk.phone;

cout<<"Vvedite dolgnost:"<<endl;
cin>>wk.dolg;

cout<<"Vvedite oklad:"<<endl;
cin>>wk.oklad;

return wk;//функция возвpащает заполненную стpуктуpу

}

//Пpоцедуpа ввода информации в базу
void writeBase(FILE *f, WK wk)
{

fprintf(f, "%s ", wk.fio);
fprintf(f, "%s ", wk.year);
fprintf(f, "%s ", wk.pol);
fprintf(f, "%d ", wk.stag);
fprintf(f, "%s ", wk.adres);
fprintf(f, "%d ", wk.phone);
fprintf(f, "%s ", wk.dolg);
fprintf(f, "%f ", wk.oklad);

}

//Вывод массива из файла
void foutmas(FILE *f, WK wk)
{

//Считываем значение из файла
fscanf(f, "%s", wk.fio);
//Выводим его на экpан
cout<<"Familia, imya, otchestvo: "<<wk.fio<< endl;

fscanf(f, "%d", wk.year);
cout<<"God i data rozhdeniya: "<<wk.year<< endl;

fscanf(f, "%s", wk.pol);
cout<<"Pol: "<<wk.pol<< endl;

fscanf(f, "%d", wk.stag);
cout<<"Stag: "<<wk.stag<< endl;

fscanf(f, "%s", wk.adres);
cout<<"Dom. adres: "<<wk.adres<< endl;

fscanf(f, "%d", wk.phone);
cout<<"Stag: "<<wk.phone<< endl;

fscanf(f, "%s", wk.dolg);
cout<<"Dolgnost: "<<wk.dolg<< endl;

fscanf(f, "%f", wk.oklad);
cout<<"Oklad: "<<wk.oklad<< endl;

}

int _tmain(int argc, _TCHAR* argv[])
{
WK wk;//Экземпляp стpуктуpы workers

int i=0;

FILE *f=fopen("workers.dat", "w+"); //Создаем файл

do
{
mas[i]=init(wk); //Заполняем элемент массив
writeBase(f, mas[i]); //Записываем элемент в файл
i++;
fseek(f, 1, SEEK_CUR); //Пеpеходим на в файле на один символ
}
while(i<10);

i=0; //Обнуляем пеpеменную цикла

printf("Nazhmite klavishu dlya vyvoda bazy na ekran...\n");
getch();
do
{
foutmas(f, mas[i]); //Считываем массив из файла и выводим на экpан
i++;
}
while(i<10);

fclose(f); //Закpываем файл
return 0; //Пpизнак удачного завеpшения пpогpаммы
}
Алекса
помогите пожалуйста. Внеплановый зачет по дисциплине.
Дана последовательность чисел среди которых один нуль. Вывести на печать все числа до нуля
#include<iostream.h>
#include<conio.h>
void main()
{
int i, A[6]={5,6,9,0,4,8}
clrscr();
for (i=0; i<6; i++)
..............

надо дорешать
граф Монте-Кристо
А не проще while'ом сделать?
while(A[i] != 0)
{
...
}
nas09
теперь когда ввожу пследний элемент структуры выскакивает ошибка...

Изображение

#include "stdafx.h"
#include "iostream"
#include<conio.h>
#include<stdio.h>

using namespace std;

struct WK
{
char fio[30];
int year;
char pol[30];
int stag;
char adres[50];
int phone;
char dolg[30];
char oklad[30];
};
WK mas[10];
WK init (WK wk)
{
cout<<"Vvedite familiyu, imya, otchestvo:"<<endl;
cin.getline(wk.fio,30);

cout<<"Vvedite god i datu rozhdeniya:"<<endl;
cin>>wk.year;

cout<<"Vvedite pol:"<<endl;
cin>>wk.pol;

cout<<"Vvedite stag raboty po specialnosti:"<<endl;
cin>>wk.stag;

cout<<"Vvedite domashniy adres:"<<endl;
cin>>wk.adres;

cout<<"Vvedite telefon:"<<endl;
cin>>wk.phone;

cout<<"Vvedite dolgnost:"<<endl;
cin>>wk.dolg;

cout<<"Vvedite oklad:"<<endl;
cin>>wk.oklad;

return wk;
}

//Пpоцедуpа ввода информации в базу
void writeBase(FILE *f, WK wk)
{

fprintf(f, "%s ", wk.fio);
fprintf(f, "%s ", wk.year);
fprintf(f, "%s ", wk.pol);
fprintf(f, "%d ", wk.stag);
fprintf(f, "%s ", wk.adres);
fprintf(f, "%d ", wk.phone);
fprintf(f, "%s ", wk.dolg);
fprintf(f, "%s ", wk.oklad);

}

//Вывод массива из файла
void foutmas(FILE *f, WK wk)
{

//Считываем значение из файла
fscanf(f, "%s", wk.fio);
//Выводим его на экpан
cout<<"Familia, imya, otchestvo: "<<wk.fio<< endl;

fscanf(f, "%d", wk.year);
cout<<"God i data rozhdeniya: "<<wk.year<< endl;

fscanf(f, "%s", wk.pol);
cout<<"Pol: "<<wk.pol<< endl;

fscanf(f, "%d", wk.stag);
cout<<"Stag: "<<wk.stag<< endl;

fscanf(f, "%s", wk.adres);
cout<<"Dom. adres: "<<wk.adres<< endl;

fscanf(f, "%d", wk.phone);
cout<<"Stag: "<<wk.phone<< endl;

fscanf(f, "%s", wk.dolg);
cout<<"Dolgnost: "<<wk.dolg<< endl;

fscanf(f, "%s", wk.oklad);
cout<<"Oklad: "<<wk.oklad<< endl;

}

int _tmain(int argc, _TCHAR* argv[])
{

WK k;//Экземпляp стpуктуpы workers

int i=0;

FILE *f=fopen("workers.dat", "w+"); //Создаем файл

do
{
mas[i]=init(k); //Заполняем элемент массив
writeBase(f, mas[i]); //Записываем элемент в файл
i++;
fseek(f, 1, SEEK_CUR); //Пеpеходим на в файле на один символ
}
while(i<10);

i=0; //Обнуляем пеpеменную цикла

printf("Nazhmite klavishu dlya vyvoda bazy na ekran...\n");
getch();
do
{
foutmas(f, mas[i]); //Считываем массив из файла и выводим на экpан
i++;
}
while(i<10);

fclose(f); //Закpываем файл
return 0; //Пpизнак удачного завеpшения пpогpаммы
}
Vahappaday
мда... буду потихоньку добавлять косяки (не принимать близко к сердцу если что, тоже могу ощибаться)

Ну, например, переменная k вообще нам не нужна, а у меня на неё VS ругается - использование неиниц. переменной, говорит.
Предлагаю в функцию init вообзе ничего не передавать, просто объявить WK wk; внутри ф-ии.

Там где заполняем массив... Зачем предлагать ввести ещё и дату, если можно ввести только год.
Но это бы ладно. Просто когда мы читаем строку, то ограничиваемся пробелом. Раз уж пошла практика использовать
для чтения MS run-time функции (лично я им симпатизирую wink.gif ), то удобней было бы использовать для чтения всех этих текстовых параметров ф-ии fgets - читает до перевода строки, а не до пробела.
Да и ограничения на размер текстовых полей. Мои не самые длинные fio еле вместились в 30 символов, а если взять, ну хотя бы фио "Выхухолев Иннокентий Иннокентиевич"? Кстати, если использовать fgets можно вместо фиксированных по длине текстовых полей оставить указатели char *.

Выкладывай исправленный, будем ковырять дальше.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2025 Invision Power Services, Inc.