Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запись и удаление из файла с++, запись и удаление из файла с++ 
V
    Опции темы
Forxi358
Дата 10.2.2016, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.2.2016

Репутация: нет
Всего: нет



помогите пожалуйста... почему у меня не правильно работает программа
Код

#define _CRT_SECURE_NO_WARNINGS 
#include <fstream> 
#include<string.h> 
#include<cstdio> 
#include <stdio.h> 
#include <iostream> 
using namespace std; 


struct avto 

char mark[20], color[20],cost[34]; 

int god; 
}; 


int main() 


FILE *f; 
FILE *f2; 
setlocale(LC_ALL, "Russian"); 
int kol; 
avto *S; 
cout <<"Vvedite kolichestvo avto \n"; 
cin >>kol; 
cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
S = new avto[kol]; 


f = fopen("D:\\file.txt", "w+"); 


ofstream von("D:\\file.txt", ios::out | ios::in); 



cout << "Vvod dannih \n"; 
for (int i = 0; i < kol; i++) 

cout << "\n mark : "; 
gets_s(S[i].mark); 
von<<"mark " <<S[i].mark << " "; 

cout <<" \n color: "; 
gets_s(S[i].color); 
von<< "color " <<S[i].color << " "; 

cout <<"\n cost : "; 
gets_s(S[i].cost); 
von << "cost " <<S[i].cost << " "; 


cout << "\n god : "; 
cin >> S[i].god; 

von <<"god " <<S[i].god <<endl; 
cin.ignore(numeric_limits<streamsize>::max(), '\n'); 

von.close(); 

f2 = fopen("temp.txt", "w+"); 
ofstream lol("temp.txt", ios::out | ios :: app); 

int g; 
cout << "Vvedite god "; 
cin >> g; 
for (long i = 0;i<kol;i++) 
if (S[i].god > g) 

lol <<"mark: "<< S[i].mark<<" color: " <<S[i].color<<" cost " <<S[i].cost << " god "<< S[i].god << endl; 

fclose(f); 
fclose(f2); 
lol.close(); 
remove("file.txt"); 
rename("temp.txt", "file.txt"); 


system("pause"); 

return 0; 
}

задание такое
Структура "Автомобиль":
-    марка;
-    год выпуска;
-    цена;
-    цвет.    
Удалить все элементы, у которых год выпуска меньше заданного.( у меня не удаляется )
сначала записываем в файл структуру
потом открывает новый файл и  записываем в него  только то  у чего год выпуска больше заданного
но у меня почему-то все остается на месте(что записали то и осталось, т.е остался элемент у  у которых год выпуска меньше заданного)
    Добавить элемент с номером К(я не пойму как это сделать)
заранее спасибоо)


PM MAIL   Вверх
Михаил Марьясов
Дата 11.2.2016, 12:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот мой упрощенный вариант
Код


#include <string>
#include <vector>
#include <fstream>

using namespace std;

struct avto
{
    string mark;
    string color;
    int cost;
    int god;
};

const char delimeter = ',';
const int year = 2000;

vector<string> split(const string& s, char c)
{
    vector<string> v;
    string::size_type i = 0;
    string::size_type j = s.find(c);

    while (j != string::npos) {
        v.push_back(s.substr(i, j - i));
        i = ++j;
        j = s.find(c, j);

        if (j == string::npos)
            v.push_back(s.substr(i, s.length()));
    }
    return v;
}


int main(int argc, char **argv)
{
    vector<avto> avtos;
    string line;
    ifstream myfile("d:\\file.txt");
    if (myfile.is_open())
    {
        while (myfile.good())
        {
            getline(myfile, line);
            vector<string>  v = split(line, delimeter);
            if (v.size() == 4)
            {
                avto a;
                a.mark = v[0];
                a.color = v[1];
                a.cost = stoi(v[2]);
                a.god = stoi(v[3]);
                avtos.push_back(a);
            }
        }
    }
    myfile.close();
    if (avtos.size() > 0)
    {
        ofstream ofile("d:\\outfile.txt");
        if (ofile.is_open())
        {
            for (size_t i = 0; i < avtos.size(); i++)
            {
                if (avtos[i].cost > year)
                {
                    ofile << avtos[i].mark << delimeter << avtos[i].color << delimeter << to_string(avtos[i].cost) << delimeter << to_string(avtos[i].god) << endl;
                }
            }
        }
        ofile.close();
    }
}



а это файл
toyete,blue,5600,1978
lada,green,15600,1998
pegeot,beliy,1800,2008
oka,black,600,2016


Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
xvr
Дата 11.2.2016, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Вот это зачем ?
Код

f = fopen("D:\\file.txt", "w+"); 
ofstream von("D:\\file.txt", ios::out | ios::in); 
Пишем в 2 ручья?  smile 
Одно из 2х лишнее.

И далее то же самое для 

Код

f2 = fopen("temp.txt", "w+"); 
ofstream lol("temp.txt", ios::out | ios :: app); 

PM MAIL   Вверх
Forxi358
Дата 11.2.2016, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.2.2016

Репутация: нет
Всего: нет



Код

#include <iostream> 
#include <conio.h> 
#include <stdio.h> 
#include <stdlib.h> 
using namespace std; 
struct avto 

char mark[20]; 
char color[30]; 
int year; 
float cost; 
}; 

void main () 

clrscr (); 
avto p; 
FILE *f; 
f=fopen("D:\\f44.txt","w"); 

int n; 
printf("\n kol-?"); 
scanf("%d",&n); 
for (int i=0; i<n; i++) 

printf("\n mark: "); 
scanf("%s",&p.mark); 
printf("\n color: "); 
scanf("%s",&p.color); 
printf("\n Year: "); 
scanf("%d",&p.year); 
printf("\n Cost: "); 
scanf("%f",&p.cost); 

fwrite(&p,sizeof(avto),1,f); 


fclose(f); 
f=fopen("D:\\f55.txt","r"); 
while(fread(&p,sizeof(avto),1,f)) 

printf("\n%s %s %d %f",p.mark,p.color,p.year,p.cost); 

int yearmin; 
cout«"введите год"; 
cin»yearmin; 
if(p.year>yearmix) 
fwrite(&p,sizeof(avto),1,f); 
fclose(f); 
getch (); 
}
почему этот не работает?

PM MAIL   Вверх
xvr
Дата 12.2.2016, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Потому что вы все данные складываете в одну и туже переменную p, которую потом и выводите (причем не в текстовом виде, а в бинарном). Так что если вам повезет, то в выходном файле вы получите 1 запись (от последнего введенного автомобиля), а если не повезет - то получите пустой файл.

PM MAIL   Вверх
disputant
Дата 12.2.2016, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 28.11.2011

Репутация: нет
Всего: 3



PM MAIL   Вверх
feodorv
Дата 13.2.2016, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(xvr @  12.2.2016,  13:44 Найти цитируемый пост)
Так что если вам повезет

Не повезёт:
Цитата(Forxi358 @  11.2.2016,  23:33 Найти цитируемый пост)
f=fopen("D:\\f55.txt","r"); 
...
fwrite(&p,sizeof(avto),1,f); 




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Forxi358
Дата 14.2.2016, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.2.2016

Репутация: нет
Всего: нет



Код

#include <iostream> 
#include <conio.h> 
#include <stdio.h> 
#include <stdlib.h> 
using namespace std; 
struct avto 

char mark[20]; 
char color[30]; 
int year; 
float cost; 
}; 
int main () 


avto p; 
FILE *f; 
f=fopen("D:\\f44.txt","w"); 
int n; 
printf("\n kol-?"); 
scanf("%d",&n); 
for (int i=0; i<n; i++) 

printf("\n mark: "); 
scanf("%s",&p.mark); 
printf("\n color: "); 
scanf("%s",&p.color); 
printf("\n Year: "); 
scanf("%d",&p.year); 
printf("\n Cost: "); 
scanf("%f",&p.cost); 
fwrite(&p,sizeof(avto),1,f); 

fclose(f); 
f=fopen("D:\\f44.txt","r"); 
while(fread(&p,sizeof(avto),1,f)) 

printf("\n%s %s %d %f",p.mark,p.color,p.year,p.cost); 

int yearmin; 
cout<<" vvod goda"; 
cin>>yearmin; 
if(p.year>yearmin) 
fwrite(&p,sizeof(avto),1,f); 
fclose(f);

int N;
cout<<"\nN vvod\n";
cin>>N;
f=fopen("D:\\f44.txt","a+"); 
for (int i=0; i<N; i++) 

printf("\n mark: "); 
scanf("%s",&p.mark); 
printf("\n color: "); 
scanf("%s",&p.color); 
printf("\n Year: "); 
scanf("%d",&p.year); 
printf("\n Cost: "); 
scanf("%f",&p.cost); 
fwrite(&p,sizeof(avto),1,f); 





fclose(f); 
getch (); 
}



почему мне в файле выдает не русскими буквами а закарлючки....??????????????????7
PM MAIL   Вверх
xvr
Дата 15.2.2016, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Forxi358 @  14.2.2016,  13:58 Найти цитируемый пост)
почему мне в файле выдает не русскими буквами а закарлючки

Потому что 'русские буквы' бывают разные. Рекомендую просветится на предмет кодировок. Для 'русских букв' их есть как минимум (часто используемых) 3 разных (cp1251, cp866, utf8), а максимум - с десяток  smile 

Так что какая именно у вас кодировка окажется в файле сказать трудно (она будет определяться тем, какая кодировка у вас стоит в консоли)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0960 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.