С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Крюгер
0 / 60 / 3
Регистрация: 16.11.2012
Сообщений: 431
Записей в блоге: 9
Завершенные тесты: 1
#1

файлы, чтение запись идет не так как нужно - C++

24.12.2013, 16:15. Просмотров 248. Ответов 0

и так, мне очень нужна ваша помощь! в кратце эта программа считывает файл в буфер, потом сравнивает 1 значение из буфера, и если оно подходит изменяет на нужное.
и вобщем всё бы хорошо, даже справляется с поставленой задачей но есть одно НО.

если я выбираю пункт заменить допустим все "0" в 11 столбце, то всё отлично заменяется,
но если я изменяю другое число, например 5, эм... на 32, то на выходе я получаю кашу.
жуткого качества.

в чем проблема -хз, вроде бы всё правильно.

(код в плохом виде , т.к на скорую руку)

что считывается:
Код
wpn_revolver.dds
0 -0.003498 0.041957 0.022500 0.000000 -1.000000 0.000000 0.535665 -0.301831 1 5 1.000000
0 0.002402 0.041957 0.022500 0.000000 -1.000000 0.000000 0.568365 -0.204401 1 5 1.000000
0 -0.000198 0.041957 0.022800 0.000000 -1.000000 0.000000 0.535665 -0.251108 1 5 1.000000
wpn_revolver.dds
0 -0.004598 0.041957 0.021400 0.000000 -1.000000 0.000000 0.568365 -0.348539 1 0 1.000000
0 -0.006098 0.041957 0.019500 0.000000 -1.000000 0.000000 0.628865 -0.384559 1 0 1.000000
0 -0.003498 0.041957 0.022500 0.000000 -1.000000 0.000000 0.535665 -0.301831 1 0 1.000000
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
#include <windows.h>
 
#include <fstream>
#include <string>
#include <clocale>
#include <cstring>
#include <stdio.h>
 
using namespace std;
 
struct table
{
int dum;
float x,y,z;
float nx,ny,nz;
float u,v;
int dumm;
int idbone;
float weight;
};
 
 
int main()
{setlocale(LC_CTYPE, "Russian");
ifstream fin;
ofstream fout;
const int szbuf = 256;
const string txn = "wpn_revolver.dds";
char lbufer[szbuf];
char obufer[szbuf];
string wbufer;
int cline = 0;
table *ptable;
table *prtable;
int incr = 0;
int searchv;
int variablev;
 
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
COORD cor;
 cor.X = 0;
 cor.Y = 20;
 
 
fin.open("input.smd",std::ios::in);
if (!fin.is_open()){cout << "не удалось открыть файл.\n";}
while (!fin.eof())
{char c;
fin.get(c);
if (c == '\n') cline++;}
cout <<"строк в файле:"<<cline<<"\n";
fin.close();
 
fin.open("input.smd",std::ios::in);
ptable = new table[cline]; //---------------буфер структурированного файла
prtable = new table[cline]; //--------------буфер для записи корректированых данных
 
while (!fin.eof()){
 
 fin.getline(lbufer, szbuf);
 //wbufer=lbufer;
 
 //if (wbufer==txn){continue;
 //}else{
 sscanf( &lbufer[0], "%d %f %f %f %f %f %f %f %f %d %d %f" , &ptable[incr].dum, &ptable[incr].x, &ptable[incr].y,
 &ptable[incr].z, &ptable[incr].nx, &ptable[incr].ny, &ptable[incr].nz, &ptable[incr].u, &ptable[incr].v,
 &ptable[incr].dumm, &ptable[incr].idbone, &ptable[incr].weight);
 
incr++;
/*
printf("%d %f %f %f %f %f %f %f %f %d %d %f" , ptable[1].dum, ptable[1].x, ptable[1].y,
 ptable[1].z, ptable[1].nx, ptable[1].ny, ptable[1].nz, ptable[1].u, ptable[1].v,
 ptable[1].dumm, ptable[1].idbone, ptable[1].weight);*/
 SetConsoleCursorPosition(hConsole,cor);
cout <<"read:"<<(float)incr/cline*100<<"% \b\n";
if (incr==cline){goto S;}
 }//}
 
S:{
 
 cout << "введите значение которое следует заменить:\n";
 cin >> searchv;
 cout << "введите значение на которое следует изменять:\n";
 cin>> variablev;
 
 cout <<"замена выполняется...\n";
 for(int q = 0; q<=cline; q++){
prtable[q].dum = ptable[q].dum;
prtable[q].x = ptable[q].x;
prtable[q].y = ptable[q].y;
prtable[q].z = ptable[q].z;
prtable[q].nx = ptable[q].nx;
prtable[q].ny = ptable[q].ny;
prtable[q].nz = ptable[q].nz;
prtable[q].u = ptable[q].u;
prtable[q].v = ptable[q].v;
prtable[q].dumm = ptable[q].dumm;
if(ptable[q].idbone==searchv){ prtable[q].idbone=0; prtable[q].idbone=variablev;}else{
 prtable[q].idbone=ptable[q].idbone;}
//prtable[q].idbone = ptable[q].idbone;
prtable[q].weight = ptable[q].weight;
 
SetConsoleCursorPosition(hConsole,cor);
cout <<"analise:"<<(float)q/cline*100<<"% \b\n";
 
if (q==cline){goto R;}}}
R:{
cout <<"замена успешно выполнена!\n";
cout <<"идет запись результатов...\n";
 
fout.open("output.smd",ios::out);
 
for(int w = 0; w<=cline; w++){
if(prtable[w].dum+prtable[w].x+prtable[w].y+
 prtable[w].z+prtable[w].nx+prtable[w].ny+prtable[w].nz+prtable[w].u+prtable[w].v,
 prtable[w].dumm+prtable[w].idbone+prtable[w].weight==variablev){
 sprintf(&obufer[0],"%s",txn.c_str());
 }else{
sprintf(&obufer[0],"%d %f %f %f %f %f %f %f %f %d %d %f",prtable[w].dum, prtable[w].x, prtable[w].y,
 prtable[w].z, prtable[w].nx, prtable[w].ny, prtable[w].nz, prtable[w].u, prtable[w].v,
 prtable[w].dumm, prtable[w].idbone, prtable[w].weight);}
 
fout << &obufer[0]<<endl;
SetConsoleCursorPosition(hConsole,cor);
cout <<"write:"<<(float)w/cline*100<<"% \b\n";
 
  }
cout <<"запись завершена\n";
fout.close();
delete [] ptable;
delete [] prtable;}
return 0;}

тестил на входе всё норм считывается, значит где то на выходе беда,
видимо условие не срабатывает :
C++
1
2
3
4
5
if(prtable[w].dum+prtable[w].x+prtable[w].y+
 prtable[w].z+prtable[w].nx+prtable[w].ny+prtable[w].nz+prtable[w].u+prtable[w].v,
 prtable[w].dumm+prtable[w].idbone+prtable[w].weight==variablev){
 sprintf(&obufer[0],"%s",txn.c_str());
 }
хотя так то должно.
оно задумано чтобы срабатывало когда сумма всех значение полей равна заменяемому,
т.к при считывании вот этого ->wpn_revolver.dds
функция по всем параметрам вернет 0, то есть строка из 12 нулей,
а при поиске и замене их сумма станет равной заменяемому значению

Добавлено через 36 минут
да блин, шо в тему никто даже не заходит. я понимаю , что конечно многа букафф, но блин прога очень нужна, помогите кто может чтоль.

Добавлено через 31 минуту
такие все,отзывчивые... еще 100 лет, и на мою скромную тему полюбому ответят!

Добавлено через 1 час 0 минут
эту статью посмотрели уже ~40 человек...
похоже она получилась заведомо мертвой, так как многа букафф...

Добавлено через 14 часов 12 минут
спустя день никто не решился отписатьса по програмке

Добавлено через 2 часа 7 минут
почему происходит эта проблема я выяснил, незнаю даже как сразу этого незаметил, суть её заключается в том что при поиске нулевых значений нули естессно находятся, а потому проверка (второй фрагмент кода)
выполняется, в иных случаях проверка не срабатывает.

Всем спасибо за помощь!
осталось решить только как выйти из этой ситуации и всё ОК! да да программе ЖИТЬ
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 16:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос файлы, чтение запись идет не так как нужно (C++):

[Файлы] Запись-чтение-запись. Почему не прокатывает? - C++
Сначала записываю в файл &quot;а&quot; запись &quot;makulatura&quot;, потом читаю ее в строку h. Все ок. Но потом когда открываю файл &quot;a&quot; опять для записи с...

Чтение и запись в файлы - C++
Пусть файл с произвольным именем содержит 10 целых чисел. Написать программу fileprocessor, которая выполняет следующие действия: 1....

Файлы (чтение/запись) - C++
Привет всем. Уважаемые программисты! Второй день мучаюсь.. помогите плиз.. Забираю из текстового файла информацию и передаю её в...

Запись и чтение, файлы - C++
Помогите пожалуйста, не могу понять записывается ли в файл что-то и правильно ли я делаю? код собран по кусочкам, из интернета, привожу две...

Чтение и запись в текстовые файлы. - C++
Доброй ночи всем. Не очень понимаю в си++,щас вот пытаюсь начинать учиться. Может поможет кто. Задание дали такое : Текстовый файл...

Бинарные файлы, чтение и запись - C++
Доброго времени суток. Подскажите пожалуйста, как организовать побайтовое чтение и запись данных в бинарный файл. Правильно ли будет...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2013, 16:15
Привет! Вот еще темы с ответами:

Длинная арифметика(чтение и запись в файлы) - C++
Во время выполнения программа вылетает с выдачей ошибки &quot;Необработанное исключение по адресу 0x000B966F в longMult.exe: 0xC0000005:...

fwrite\fread: чтение и запись в бинарные файлы - C++
Добрый день. Пытаюсь разобратся с чтением и записью в бинарные файлы.. в общем обрисую в краце проблему, записываю класс. class tPoint ...

Запись/чтение структур (файлы) + разница между FILE * и <fstream> - C++
Всем привет. Порыскал по форуму, погуглил... Решения есть, но они не ясны (что, почему да как) и не все работают. Однако, я так и не нашёл...

Работа с потоками идет не так, как надо. Почему? - C++
Есть вот такая вот программа моя. Она запускает потоки сортировки массива и его вывода с разными приоритетами. Но даже если приоритет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.