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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2010, 09:37   #1
gloriz
 
Регистрация: 16.04.2010
Сообщений: 8
По умолчанию Код набран с книги, выдает 9 ошибок

Здравствуйте пользователи форума! Я пытаюсь изучать язык С++, читаю книгу Т. А. Павловой, набираю коды из этой книги в VC++6. Данный код проверен на правильность набора неоднократно, но все же выдает кучу ошибок. Может просмотрим вместе. Буду благодарен за объяснения.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <windows.h>
//char bufRus[256];
//char* Rus(const char* text){
//	CharToOem(text, bufRus);
//	return bufRus;
//}

const int l_name=31;

struct Man{
	char name[l_name];
	int birth_day;
	float pay;
	Man* next;
};

Man* add(Man* beg, const Man &man);
int edit(Man* beg);
Man* find(Man* beg, char* name, Man** prev);
void find(Man* beg, int birth_day);
void find(Man* beg, float pay);
void find_man(Man* beg);
void get_name(char* name);
int menu();
void print_dbase(Man* beg);
Man* read_dbase(char* filename);
const Man* read_man();
Man* remove(Man* beg);
int write_dbase(char* filename, Man* beg);


//---------------------------- Главная функция
int main(){
	Man* beg = read_dbase("dbase.txt", ios::in | ios::nocreate);
	if(!beg) return 1;
	while (true){
		switch (menu()){
		case 1: add(beg, read_man()); break;
		case 2: beg=remove(beg); break;
		case 3: find_man(beg); break;
		case 4: edit(beg); break;
		case 5: print_dbase(beg); break;
		case 6: write_dbase("dbase.txt", beg); break;
		case 7: return 0;
		default: puts(" Надо выводить число от 1 до 7"); break;
		}
	}
	return 0;
}
//--------------------------------- Добавление сотрудника
Man* add(Man* beg, const Man& man){
	Man* pv= new Man;
	pv->next=0;

	if (beg){
		Man* temp=beg;
		while (temp->next)
			temp=temp->next;
		temp->next=pv;
	}
	else
		beg=pv;
	return beg;
}
//--------------------------------- Корректировка сведений
int edit(Man* beg){
	char name[l_name], buf[80];

	get_name(name);            //Кого ищем?

	Man* prev;
	Man* pv=find(beg, name, &prev);
	if (!pv) return 1;        //Не нашли
	do { 
		puts("Введите новый оклад");
		gets(buf);
	}
	while(!(pv->pay=(float)atof(buf)));
	return 0;
}
//-------------------------------- Поиск сотрудника в списке по фамилии
Man* find(Man* pv, char* name, Man** prev){
	*prev=0;
	while(pv){
		if (strstr(pv->name, name))
			if (pv->name[strlen(name)]==' '){
				printf("%30s%5i%10.2f\n", pv->name, pv->birth_day, pv->pay);
				return pv;
			}
			*prev=pv;
			pv=pv->next;
	}
	puts("Такаго сотрудника нет\n");
	return 0;
}
//-------------------------------- Поиск и вывод сотрудника по году рождения
void find(Man* pv, int birth_day){
	while(pv){
		if (pv->birth_day<birth_day)
		printf("%30s%5i%10.2f\n", pv->name, pv->birth_day, pv->pay);
		pv=pv->next;
	}
}
gloriz вне форума Ответить с цитированием
Старый 16.04.2010, 09:38   #2
gloriz
 
Регистрация: 16.04.2010
Сообщений: 8
По умолчанию весь не влез. Продолжение

Код:
//-------------------------------- Поиск
void find_man(Man* beg){
	char buf[l_name];
	int birth_day, option;
	float pay;

	do{
		puts("1 - поиск по фамилии, 2 - по году рождения, \n\
			3 - по окладу, 4 - отмена\n");
		gets(buf);
	}
	while (!(option=atoi(buf)));

	switch (option){
	case 1: get_name(buf);
		Man *prev;
		Man *pv=find(beg, buf, &prev);
		break;
	case 2: do{
		puts("Введите год рождения\n"); gets(buf);
			}
		while(!(birth_day=atoi(buf)));
		find(beg, birth_day);
		break;
	case 3: do{
		puts("Введите оклад\n"); gets(buf);
			}
		while (!(pay=(float)atof(buf)));
		find(beg, pay);
		break;
	case 4: return;
	default:
			puts("неверный режим\n");
	}
}
//--------------------------------------- Запрос фамилии
void get_name(char* name){
	puts("Введите фамилию И. О. ");
	gets(name);
	// OemToChar(name, name);
}
//-------------------------------------- Вывод меню
int menu(){
	char buf[10];
	int option;
	do{
		puts("=================================================");
		puts("1 - добавление сотрудника\t 4 - корректировка сведений");
		puts("2 - удаление сотрудника\t\t 5 - вывод базы на экран");
		puts("3 - поиск сотрудника\t\t 6- вывод базы в файл");
		puts("\t\t\t 7 - выход");
		gets(buf);
		option=atoi(buf);
	}
	while(!option);
	return option;
}
//-------------------------------------- Вывод базы на экран
void print_dbase(Man* beg){
	Man* pv =beg;
	while (pv){
		printf("%s%5i%10.2f\n", pv->name, pv->birth_day, pv->pay);
		pv=pv->next;
	}
}
//-------------------------------------- Чтение базы из файла
Man* read_dbase(char* filename){
	FILE* fin;
	Man man, *beg=0;

	if ((fin=fopen(filename, "r"))==0){
		printf("Нет файла %s\n", filename); return 0;
	}
	while(!feof(fin)){
		fgets(man.name, l_name, fin);
		fscanf(fin, "%i%f\n", &man.birth_day, &man.pay);
		beg=add(beg, man);
	}
	fclose(fin);
	return beg;
}
//-------------------------------------- Ввод информации о новом сотруднике
Man read_man(){
	Man man; char buf[80];

	get_name(man.name);
	for (int i=strlen(man.name); i<l_name; i++)
		man.name[i]=' ';
	man.name[l_name-1]='\0';
	do{
		puts("Введите год рождения"); gets(buf);
	}
	while(!(man.birth_day=atoi(buf)));
	
	do{
		puts("Введите оклад "); gets(buf);
	}
	while(!(man.pay=(float)atof(buf)));

	return man;
}
//------------------------------------ Удаление сотрудника
Man* remove(Man* beg){
	char name[l_name];
	get_name(name);       //Кого удаляем?
	Man* prev;
	Man* pv=find(beg, name, &prev);
	if (pv) {             //Если нашли
		if (pv==beg)      //Удаление из начала списка
			beg=beg->next;
		else                      //Удаление из середины или конца списка
			prev->next=pv->next;
			delete pv;            //Освобождение памяти из под элемента
	}
	return beg;
}
//------------------------------------ Вывод базы в файл
int write_dbase(char *filename, Man *pv){
	FILE *fout;
	if ((fout=fopen(filename, "w"))==NULL){
		puts("Ошибка открытия файла"); return 1;
	}

	while (pv){
		fprintf(fout, "%s%5%10.2f\n", pv->name, pv->birth_day, pv->pay);
		pv=pv->next;
	}
	fclose(fout);
	return 0;
}
gloriz вне форума Ответить с цитированием
Старый 16.04.2010, 10:08   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

А ошибки мы должны телепатически прочитать из вашего компилятора?
p51x вне форума Ответить с цитированием
Старый 16.04.2010, 11:19   #4
gloriz
 
Регистрация: 16.04.2010
Сообщений: 8
По умолчанию Выводит ошибки

Код:
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(39) : error C2653: 'ios' : is not a class or namespace name
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(39) : error C2065: 'in' : undeclared identifier
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(39) : error C2653: 'ios' : is not a class or namespace name
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(39) : error C2065: 'nocreate' : undeclared identifier
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(39) : error C2660: 'read_dbase' : function does not take 2 parameters
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(43) : error C2664: 'add' : cannot convert parameter 2 from 'const struct Man *' to 'const struct Man &'
        Reason: cannot convert from 'const struct Man *' to 'const struct Man'
        No constructor could take the source type, or constructor overload resolution was ambiguous
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(127) : error C2360: initialization of 'pv' is skipped by 'case' label
        c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(125) : see declaration of 'pv'
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(133) : error C2360: initialization of 'pv' is skipped by 'case' label
        c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(125) : see declaration of 'pv'
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(139) : error C2360: initialization of 'pv' is skipped by 'case' label
        c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(125) : see declaration of 'pv'
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(140) : error C2361: initialization of 'pv' is skipped by 'default' label
        c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(125) : see declaration of 'pv'
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(191) : error C2556: 'struct Man __cdecl read_man(void)' : overloaded function differs only by return type from 'const struct Man *__cdecl read_man(void)'
        c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(32) : see declaration of 'read_man'
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(191) : error C2040: 'read_man' : 'struct Man (void)' differs in levels of indirection from 'const struct Man *(void)'
Error executing cl.exe.
gloriz вне форума Ответить с цитированием
Старый 16.04.2010, 11:44   #5
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Посмотрите нет ли на следующей странице книги слов "это был код, который выведет вам девять ошибок, а теперь напишем правильный код"
Tirendus вне форума Ответить с цитированием
Старый 16.04.2010, 11:53   #6
gloriz
 
Регистрация: 16.04.2010
Сообщений: 8
По умолчанию

Смешно конечно, но все же если серьезно почему столько ошибок.

Всего ошибок 12, но я подключил директиву iostream.h исчезли первые 4 из вышеописанных.

Последний раз редактировалось gloriz; 16.04.2010 в 12:23.
gloriz вне форума Ответить с цитированием
Старый 16.04.2010, 16:23   #7
gloriz
 
Регистрация: 16.04.2010
Сообщений: 8
По умолчанию

Кстати я нашел книгу здесь на сайте, с которой я код набрал.
http://programmersforum.ru/showthread.php?t=31602
Сообщение №5. Книга Т. А. Павловской. Стр. 176
gloriz вне форума Ответить с цитированием
Старый 17.04.2010, 13:21   #8
jhonyxakep
Пользователь
 
Аватар для jhonyxakep
 
Регистрация: 17.04.2010
Сообщений: 20
По умолчанию

gloriz, возможно есть некоторые проблемы с совместимостью компиляторов... Кстати из этой книжки половина всех кодов не работала, или попробуйте взять немного другой компилятор Mingw(в составе dev-cpp) BCC и типа того
Strange Code Generator
jhonyxakep вне форума Ответить с цитированием
Старый 17.04.2010, 13:25   #9
jhonyxakep
Пользователь
 
Аватар для jhonyxakep
 
Регистрация: 17.04.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от gloriz Посмотреть сообщение
Код:
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(39) : error C2653: 'ios' : is not a class or namespace name
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(39) : error C2065: 'in' : undeclared identifier
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(39) : error C2653: 'ios' : is not a class or namespace name
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(39) : error C2065: 'nocreate' : undeclared identifier
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(39) : error C2660: 'read_dbase' : function does not take 2 parameters
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(43) : error C2664: 'add' : cannot convert parameter 2 from 'const struct Man *' to 'const struct Man &'
        Reason: cannot convert from 'const struct Man *' to 'const struct Man'
        No constructor could take the source type, or constructor overload resolution was ambiguous
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(127) : error C2360: initialization of 'pv' is skipped by 'case' label
        c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(125) : see declaration of 'pv'
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(133) : error C2360: initialization of 'pv' is skipped by 'case' label
        c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(125) : see declaration of 'pv'
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(139) : error C2360: initialization of 'pv' is skipped by 'case' label
        c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(125) : see declaration of 'pv'
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(140) : error C2361: initialization of 'pv' is skipped by 'default' label
        c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(125) : see declaration of 'pv'
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(191) : error C2556: 'struct Man __cdecl read_man(void)' : overloaded function differs only by return type from 'const struct Man *__cdecl read_man(void)'
        c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(32) : see declaration of 'read_man'
c:\documents and settings\pavel\рабочий стол\паша\учеба\программа17.cpp(191) : error C2040: 'read_man' : 'struct Man (void)' differs in levels of indirection from 'const struct Man *(void)'
Error executing cl.exe.
И еще, все проблемы с ios, cout,std решаются дерективой "using namespace std;" а еще в коде не хватает fstream.h
Strange Code Generator
jhonyxakep вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Код не всегда выдает правильный результат Maxx Microsoft Office Excel 2 18.02.2010 15:59
простой код...почему выдает ошибку access violation at address!?? sleevman Помощь студентам 2 28.10.2009 20:47
Выдает ошибку следующий код: Polotenchik Общие вопросы Delphi 16 25.07.2009 22:27
Подскажите пожалуйста запускаю программу Ctrl+F9, а ничего не происходит. Alt+F9 ошибок не выдает! Dialon Паскаль, Turbo Pascal, PascalABC.NET 5 06.02.2009 14:34