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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2014, 14:58   #1
elaxblackfox
 
Регистрация: 09.06.2014
Сообщений: 9
Вопрос Программа выводит в текстовой файл мусор!

Программа не выводит в файл .txt нужные данные, а всегда какой то мусор например "ЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌЌ ЌЌЌЌЌЌP-842150451-431602080.00
Помогите найти причину почему выводит такое безобразие.

Последний раз редактировалось elaxblackfox; 30.11.2014 в 15:14.
elaxblackfox вне форума Ответить с цитированием
Старый 30.11.2014, 15:02   #2
elaxblackfox
 
Регистрация: 09.06.2014
Сообщений: 9
По умолчанию Код

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <windows.h>
using namespace std;

 char bufRus[256];

 char* Rus(const char* text) 
 {
	 CharToOemA(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);
Man  read_man();
Man* remove(Man* beg);
int write_dbase(char* filename, Man* beg);
 
//   Главная функция
 
int main()

{
  Man* beg = read_dbase("D:\\dbase.txt");
  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("D:\\dbase.txt", beg);	break;
       case 7: return 0;
    default: puts(Rus("Надо вводить число от 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(Rus("Введите новый оклад"));
 		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(Rus("Такого сотрудника нет\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;
}
}
 // поиск и вывод по окладу
 void find(Man* pv, float pay)
{ while (pv){
	if (pv->pay>=pay)
	printf("30s%5i%10.2f\n", pv->name, pv->birth_day, pv->pay);
	pv=pv->next;
}
}
// Поиск
void find_man(Man* beg){
	char buf[l_name];
	int birth_day, option;
	float pay;
	
	do {
		puts(Rus("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(Rus("Введите год рождения\n")); gets(buf);}
			while (!(birth_day=atoi(buf)));
				find(beg, birth_day); }
			break;
		case 3: do {
			puts(Rus("Введите оклад\n")); gets(buf);
		}
			while(!(pay=(float)atof(buf)));
			find(beg, pay); break;
		case 4: return;
		default: puts(Rus("Неверный режим\n"));
	}
}
// Запрос фамилии
void get_name(char* name){
	puts(Rus("Введите фамилию И.О. "));
	gets(name);
	//OemToChar(name, name);
}
// Вывод меню
 
int menu()
{
	char buf[10];
  int option;
 do{puts(Rus("\n  1 - добавление сотрудника список"));
     puts(Rus("  2 - удаление сотрудника из списка"));
     puts(Rus("  3 - поиск сотрудника в списке"));
     puts(Rus("  4 - корректировка сведений "));
     puts(Rus("  5 - вывод списка на экран"));
     puts(Rus("  6 - вывод списка в файл"));
	 puts(Rus("  7 - Выход\n"));
     gets(buf);  puts("\n");
     option = atoi(buf);
    } while(!option);
 return option;
}

Последний раз редактировалось Stilet; 30.11.2014 в 17:57.
elaxblackfox вне форума Ответить с цитированием
Старый 30.11.2014, 15:03   #3
elaxblackfox
 
Регистрация: 09.06.2014
Сообщений: 9
По умолчанию Продолжение кода

Код:
// Вывод списка на экран
 
void print_dbase(Man* beg)
{ 
	Man* pv = beg;
 while(pv)
 { printf("%s%5i%10.2f\n", Rus(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(Rus("Heт файла %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(Rus("Введите год рождения ")); gets(buf);
     }while (!(man.birth_day = atoi(buf)));
    do { puts(Rus("Введите оклад "));  gets(buf);
    } while (!(man.pay = 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(Rus("0шибкa открытия файла")); return 1; }
   while(pv)
    { fprintf(fout,"%s%5i%10.2f\n", Rus(pv->name), 
                         pv->birth_day, pv->pay);
      pv = pv->next;
     }
  fclose(fout);
  puts(Rus("Файл записан!"));
  return 0;
 }

Последний раз редактировалось Stilet; 30.11.2014 в 17:57.
elaxblackfox вне форума Ответить с цитированием
Старый 30.11.2014, 17:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
fprintf(fout,"%s%5i%10.2f\n", Rus(pv->name),
Вот тут поставь точку прерывания. Когда брякнешься - посмотри что в полях pv.
Возможно не вывод а ввод неправильный.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 19:52   #5
ELaX
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 29
По умолчанию

Посмотрел там везде мусор в значении. Код чисто из учебника Павловской и Щупак. Возникает вопрос зачем в учебнике неработающий пример было писать... . Скачал специально C++ 6.0 проверить, тоже самое выдаёт... мусор.
Если не трудно помогите с этим примером, что именно тут не так.
ELaX вне форума Ответить с цитированием
Старый 30.11.2014, 20:26   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты кто такой? Ты в курсе что у нас не принято колоноводство?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 20:36   #7
ELaX
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 29
По умолчанию

Обоснуй в чём я не прав. Я просто выложил пример который написан в учебнике и который работает неправильно. Сегодня воскресенье и я пробую разобраться самостоятельно, а завтра придётся платить преподователю. Я не могу понять почему выдаются подобные значения, но если лично я что то нарушил, укажи это.
ELaX вне форума Ответить с цитированием
Старый 30.11.2014, 20:46   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в чём я не прав.
Пожалуйста: http://www.programmersforum.ru/rules.php
Цитата:
1.4 Запрещаться регистрировать клоны - несколько ников одним человеком.
Методы распознания клонов, администрацией не разглашаются, баняться все клоны, основной ник получает штраф "№6 Нарушение правил форума 6 баллов".
ELaX и elaxblackfox - кого из вас забанить?
Или ты думаешь что незнание законов освобождает от ответственности?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 20:58   #9
ELaX
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 29
По умолчанию

Видимо давно регистрировался раз забыл что есть уже логин. Под разными логинами тем дублей не создавал точно)
ELaX вне форума Ответить с цитированием
Старый 30.11.2014, 21:03   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ладно. На первый раз прощаю. Не зверь.
Теперь по теме: Нет файла dbase.txt.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать и заполнить текстовой файл f. Получить файл g, образованный из файла f с исключением всех слов, встречающихся больше одног Newen Паскаль, Turbo Pascal, PascalABC.NET 2 25.04.2012 17:07
Текстовой файл Аселек Паскаль, Turbo Pascal, PascalABC.NET 0 25.04.2011 18:49
текстовой файл Katia123 Паскаль, Turbo Pascal, PascalABC.NET 5 23.06.2010 10:14
Текстовой файл Stanislav Общие вопросы Delphi 3 26.12.2007 14:31