IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Задача по С++, помогите исправить
nas09
сообщение 21.5.2009, 7:01
Сообщение #1


Школьник
*

Группа: Продвинутые
Сообщений: 12
Регистрация: 21.4.2009
Город: Москва
Учебное заведение: ЮУрГУ
Вы: студент



По каждому сотруднику вводится следующая информация:
• Фамилия, имя, отчество;
• год и дата рождения;
• пол;
• стаж работы по специальности;
• домашний адрес;
• телефон;
• должность;
• оклад.

Информация о сотрудниках фирмы хранится в файле 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аммы
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Алекса
сообщение 21.5.2009, 7:38
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 1
Регистрация: 21.5.2009
Город: Cyt;bycr
Учебное заведение: Снежинский политехнический колледж
Вы: студент



помогите пожалуйста. Внеплановый зачет по дисциплине.
Дана последовательность чисел среди которых один нуль. Вывести на печать все числа до нуля
#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++)
..............

надо дорешать
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
граф Монте-Кристо
сообщение 21.5.2009, 8:14
Сообщение #3


Доцент
******

Группа: Преподаватели
Сообщений: 3 840
Регистрация: 27.9.2007
Из: Старый Оскол
Город: Москва
Учебное заведение: МФТИ/МАИ
Вы: другое



А не проще while'ом сделать?
while(A[i] != 0)
{
...
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nas09
сообщение 21.5.2009, 15:41
Сообщение #4


Школьник
*

Группа: Продвинутые
Сообщений: 12
Регистрация: 21.4.2009
Город: Москва
Учебное заведение: ЮУрГУ
Вы: студент



теперь когда ввожу пследний элемент структуры выскакивает ошибка...

(IMG:http://s56.radikal.ru/i152/0905/2c/9986b1d66b11.jpg)

#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
сообщение 25.5.2009, 15:07
Сообщение #5


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



мда... буду потихоньку добавлять косяки (не принимать близко к сердцу если что, тоже могу ощибаться)

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

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

Выкладывай исправленный, будем ковырять дальше.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 25.5.2025, 19:34

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru