Member
Статус: Не в сети Регистрация: 08.05.2006 Откуда: СПБ
Rootвообщем не понятно следующее писать новую строку от начала от какого начала? и записать хвост,ну как я понял то что у нас в буфере то пишется после новой строки
_________________ Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс
Advanced member
Статус: Не в сети Регистрация: 30.08.2003 Откуда: Санкт-Петербург
Russian
Цитата:
есть у меня файл, в котором много записей и надо заменить строку в файле на новую вот как сделать? пока что получается что я всю старую строку заполняю пробелами, но тогда в конце получаются пробелы если новая строка меньше старой,не есть хорошо. вот хотел еще заполнить строку символами '\0', но строка старая в файле остается Язык Си, компилятор gcc
смотрите, алгоритм может быть такой (в случае если каждая запись = новая строка) 1) считываем строку. 2) сравниваем с заменяемой строкой. Если пока еще не дошли - п.1. Иначе - п.3 3) считываем заменяемую строку 4) считываем "хвостик" файла. 5) в памяти преобразуем старую строку в новую. 6) пишем в файл НОВУЮ строку. 7) дописываем хвостик. Иногда проще считать файл целиком в память и уже колдовать над образом файла в памяти. Правда, все равно без неприятных операций копирования-переноса данных в памяти не обойтись. А потом можно уже записать весь полученный массив данных на диск.
_________________ {:€ дед в законе :-) нородный окодемег почетный пользователь OpenSuSE 11.3 Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad
Member
Статус: Не в сети Регистрация: 08.05.2006 Откуда: СПБ
Root правильно я понял что Хвостик это все то что после заменяемой строки? так если новая строка меньше старой, то в строке остаются старые символы я мож щас очевидных вещей не понимаю
_________________ Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс
Advanced member
Статус: Не в сети Регистрация: 30.08.2003 Откуда: Санкт-Петербург
Russian хвостик - то, что было после заменяемой строки в файле-оригинале. Если у Вас новая строка меньше, чем старая, то, во-первых, в Си есть символ конца строки ('\0' - символ с кодом ноль, ну, или на худой конец - символ перевода '\n' и "\n\r"). Символы после игнорируются (хотя зависит от того какими ф-циями пользуетесь). А, во-вторых, Вы знаете длину новой строки и никто не мешает Вам не писать лишние байты. См. или встроенную в среду справку, или MSDN (в частности, раздел по работе со строками и с файлами)
_________________ {:€ дед в законе :-) нородный окодемег почетный пользователь OpenSuSE 11.3 Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad
Member
Статус: Не в сети Регистрация: 08.05.2006 Откуда: СПБ
Root пользуюсь fputs и fgеts файл открываю в режиме "rw+" так у меня получается что он просто тупо переписывает символы в строке,ставлю конец строки. считывает прекрасно,но в файле остаются старые символы в старой строке
_________________ Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс
Member
Статус: Не в сети Регистрация: 10.12.2007 Откуда: Санкт-Петербург
добрый вечер есть класс-шаблон
Код:
template <class C> class vector { C mas[SIZE]; int number; ...... public: template <class C> C add_negative(vector <C> a, C &s); }
функция add_negative возвращает некоторую переменную типа С, выглядит она так
Код:
template <class C> C vector <C>::add_negative(vector <C> a, C &sym){ ...... return sym; }
ругается, что "не удается сопоставить определение функции существующему объявлению определение 'C vector<C>::add_negative(vector<C>,C &)' существующие объявления 'C vector<C>::add_negative(vector<C>,C &)'" подскажите пожалуйста, как тогда нужно
_________________ Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах... DCN - наше все
Здравствуйте! Подскажите пожалуйста, можно ли как-либо заполнить динамический массив, не зная заранее кол-во элементов? (элементы массива-символы строки (char) ,память под которые должна выделяться динамически) Спасибо))
Здравствуйте! Подскажите пожалуйста, можно ли как-либо заполнить динамический массив, не зная заранее кол-во элементов? (элементы массива-символы строки (char) ,память под которые должна выделяться динамически)
Member
Статус: Не в сети Регистрация: 09.03.2007 Откуда: ~5km от Москвы
Привет Оверам)
Задание такое должно быть: есть мини бд (все делается в win32 console) структура поезд, нужно забить 8 поездов (3 пункта у поезда(место отправления, время отправления, номер поезда).
Нужно сделать чтобы сортировалось по пункту назначения
Тут реализовал структуру , сначала вводим данные, потом все введеное выводится:
Код:
#include "stdafx.h" #include <iostream> #include <conio.h> #include <stdio.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { struct train { char Point[20]; //пункт назначения point char Number[20]; // номер поезда number char Time[20]; //время отправления time //int gr; };
Member
Статус: Не в сети Регистрация: 10.12.2007 Откуда: Санкт-Петербург
Здравствуйте! Вот, собственно алгоритм, который по идее должен быть реализован, но чего-то где-то ошибка #77 Обрабатывается массив p_Q[deg][deg]
Код:
int * c = new int [deg]; int i, j, r, k, flag, p; flag=0; r=0; for (i=0; i<deg; i++) c[i]=-1; for (k=0; k<deg; k++){ for (j=0; j<deg; j++){ if (this->p_Q[k][j]!=0 && c[j]<0){ flag++; if (flag) break; } if (flag){ for (i=0; i< deg; i++) this->p_Q[i][j]*=(-1/(this->p_Q[k][j])); for (i=0; i<deg; i++) for(p=0; p<deg; p++) if (i!=j) this->p_Q[p][i]+=this->p_Q[p][j]*this->p_Q[k][i]; c[j]=k; } } flag=0; }
Спасибо
Добавлено спустя 1 час 38 минут 40 секунд: есть вариант так, но это не лучше прежнего
Код:
int * c = new int [deg]; int i, j, r, k, flag, p; flag=0; r=0; for (i=0; i<deg; i++) c[i]=-1; for (k=0; k<deg; k++){ for (j=0; j<deg; j++){ if (this->p_Q[k][j]!=0 && c[j]<0){ flag++; if (flag) break; } if (flag){ for (i=0; i< deg; i++) this->p_Q[i][j]*=(-1/(this->p_Q[k][j])); for (i=0; i<deg; i++) if (i!=j) this->p_Q[i][j]*=this->p_Q[k][i]; for (p=0; p<deg; p++) for (i=0; i<deg; i++) if (i!=j) this->p_Q[p][i]+=this->p_Q[p][j]; c[j]=k; } } flag=0; }
_________________ Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах... DCN - наше все
Смысл кода в том, что пока не нажата клавиша, на экран выводятся данные получаемы от функции timer() в виде строки.
Проблема в том, что выводы outtextxy(100,100,str) накладываются друг на друга. Прошу объяснить, каким образом сделать, чтобы следующий вывод outtextxy(100,100,str) удалял текст от предыдущего. Побывал закрашивать текст функцией bar(), но это не выход, так как тогда надпись очень быстро мерцает.
Проблема в том, что выводы outtextxy(100,100,str) накладываются друг на друга. Прошу объяснить, каким образом сделать, чтобы следующий вывод outtextxy(100,100,str) удалял текст от предыдущего. Побывал закрашивать текст функцией bar(), но это не выход, так как тогда надпись очень быстро мерцает.
А где писал bar? До или после outtextxy? По идее надо ДО. Если все равно мерцает, то может тогда сделать паузу (вроде это делается через функцию delay) после outtextxy, например на секунду. Еще можно попробовать перед outtextxy(100,100,str) выводить предыдущий текст цветом фона. Т.е., напимер:
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения