Форум программистов, компьютерный форум CyberForum.ru

Строки в консоли и файлах(потоках).Зацикливание - C++

Восстановить пароль Регистрация
 
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 429
Завершенные тесты: 1
03.11.2013, 14:44     Строки в консоли и файлах(потоках).Зацикливание #1
Задание:
Создать файл записей с полями: название улицы, количество зданий на этой улице, год возникновения названия улицы. Подсчитать и вывести на экран количество зданий, которые были построены за годы от n до m.
Программу ещё полностю не написал.Начал писать и в ходе написания делаю тесту на правильность выполнения действий.Остановился на проверке считывания переменных с файла(потока).Думаю,у меня зацикливание.
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
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
using namespace std;
void main()
{
    int k[255],y[255],n,m,i,s,j;
    string str;
    fstream f("Text.txt");//создание потока
    cout<<"Input the number of strings";
    cin>>s;//количество строк на консоли
    system("cls");
 
    for(i=0;i<s;i++)//считывание строк с консоли и перевод в поток
    {cin>>str;
    f<<str;}
 
    system("cls");
    while(!f.eof())//считывание переменных с потока
    {f>>k[i];
    f>>y[i];}
 
    for(i=0;i<s;i++)//вывод массивов
        cout<<k[i]<<" "<<y[i];
    getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 14:44     Строки в консоли и файлах(потоках).Зацикливание
Посмотрите здесь:

C++ Написать программу, выводящую на экран строки, которые одновременно содержатся в двух заданных текстовых файлах
строки, которые одновременно содержатся в двух заданных текстовых файлах C++
C++ Строки в файлах
C++ Удаление последней строки в консоли
C++ Строки в файлах (вывести из каждой строки последнее слово)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
03.11.2013, 14:55     Строки в консоли и файлах(потоках).Зацикливание #2
сделай через while(!f.eof()) // или без ! я не помню
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 429
Завершенные тесты: 1
03.11.2013, 15:03  [ТС]     Строки в консоли и файлах(потоках).Зацикливание #3
Цитата Сообщение от dzrkot Посмотреть сообщение
сделай через while(!f.eof()) // или без ! я не помню
Что имено?
В 20-й строке есть.Зацикливание в консоли.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
03.11.2013, 20:23     Строки в консоли и файлах(потоках).Зацикливание #4
да не посмотрел)) тут надо снова перейти в начало файла, но я не помню как
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,180
Завершенные тесты: 1
03.11.2013, 20:44     Строки в консоли и файлах(потоках).Зацикливание #5
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
void main()
{
    int k[255],y[255],n,m,i,s,j;
    string str;
    ofstream f("Text.txt",ios::write);//создание потока вывода
    cout<<"Input the number of strings";
    cin>>s;//количество строк на консоли
    system("cls");
 
    for(i=0;i<s;i++)//считывание строк с консоли и перевод в поток
    {cin>>str;
    f<<str;}
    f.close();
 
    system("cls");
    ifstream f2("Text.txt",ios::read);//создание потока ввода
    i=0;
    while(!f2.eof() && i<255)//считывание переменных с потока
    {
         f2>>k[i];
         f2>>y[i];
         i++;
    }
    f2.close();
    for(i=0;i<s;i++)//вывод массивов
        cout<<k[i]<<" "<<y[i];
    getch();
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
03.11.2013, 21:00     Строки в консоли и файлах(потоках).Зацикливание #6
мб поможет, писал нечто похожее
размер считываемой строки из файла

в твоей проге надо вначале создать файл, потом уже в него записывать:
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
    
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
using namespace std;
int main()
{
    int n,m,i,s,j;
    char k[25],y[255];
    ofstream ofs("Text.txt"); //создать
    ofs.close();
    fstream f;
    f.open("Text.txt");//создание потока
    cout<<"Input the number of strings";
    cin>>s;//количество строк на консоли
//    system("cls");
     string str;
 
    for(i=0;i<s;i++)//считывание строк с консоли и перевод в поток
    {
    cin>>str;
    f<<str<<'\n';
    }
    f.clear();
    f.seekg(0);
//.....
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 429
Завершенные тесты: 1
03.11.2013, 22:34  [ТС]     Строки в консоли и файлах(потоках).Зацикливание #7
Всё,понял.

Добавлено через 3 минуты
Цитата Сообщение от zss Посмотреть сообщение
void main()
{
* * int k[255],y[255],n,m,i,s,j;
* * string str;
* * ofstream f("Text.txt",ios::write);//создание потока вывода
* * cout<<"Input the number of strings";
* * cin>>s;//количество строк на консоли
* * system("cls");
for(i=0;i<s;i++)//считывание строк с консоли и перевод в поток
* * {cin>>str;
* * f<<str;}
* * f.close();
system("cls");
* * ifstream f2("Text.txt",ios::read);//создание потока ввода
* * i=0;
* * while(!f2.eof() && i<255)//считывание переменных с потока
* * {
* * * * *f2>>k[i];
* * * * *f2>>y[i];
* * * * *i++;
* * }
* * f2.close();
* * for(i=0;i<s;i++)//вывод массивов
* * * * cout<<k[i]<<" "<<y[i];
* * getch();
: бинарный ">>": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое преобразование отсутствует)
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
03.11.2013, 22:35     Строки в консоли и файлах(потоках).Зацикливание #8
возвращает указатель на начало файла. Мб он тут и не нужен, так то он используется например для того чтобы 1 файл считать 2 раза, к примеру 1 раз ты считываешь файл и считаешь в нем все символы или строки, а 2ой раз уже зная эту информацию считываешь определённые строки или символы итп. В пример моём как раз так и сделано вроде
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,180
Завершенные тесты: 1
03.11.2013, 22:51     Строки в консоли и файлах(потоках).Зацикливание #9
Цитата Сообщение от triadec_96 Посмотреть сообщение
бинарный ">>": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое преобразование отсутствует)
Читайте не в строку, а в массив символов.
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 429
Завершенные тесты: 1
03.11.2013, 23:11  [ТС]     Строки в консоли и файлах(потоках).Зацикливание #10
Цитата Сообщение от dzrkot Посмотреть сообщение
возвращает указатель на начало файла. Мб он тут и не нужен, так то он используется например для того чтобы 1 файл считать 2 раза, к примеру 1 раз ты считываешь файл и считаешь в нем все символы или строки, а 2ой раз уже зная эту информацию считываешь определённые строки или символы итп. В пример моём как раз так и сделано вроде
Можете посоветовать пожалуйста какой-то другой алгоритм,ато я уже совсем запутался.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2013, 18:44     Строки в консоли и файлах(потоках).Зацикливание
Еще ссылки по теме:

C++ Как сортировать строки в файлах
C++ Редактор строки в консоли
C++ Очистка строки в консоли

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

Или воспользуйтесь поиском по форуму:
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
04.11.2013, 18:44     Строки в консоли и файлах(потоках).Зацикливание #11
Цитата Сообщение от triadec_96 Посмотреть сообщение
Можете посоветовать пожалуйста какой-то другой алгоритм,ато я уже совсем запутался.
ну я бы сделал след образом, создаем файл, заполняем его как "название улицы , кол-во зданий, год", заполнял бы названия улиц через string, потом int - кол-во зданий, и int - год(ну или в 1 стринг черещ пробелы, тут не особо разница), это была бы одна строка. Всё это было бы в цикле, его можно либо организовать по кол-ву строк, либо бесконечно до ввода контрольного слова , например "quit/exit" итп
затем возвращаемся в начало файла через f.clear(); f.seekg(0); , и начинаем считывать либо в структуру, либо в массив, либо в объект, тут уже придумать можно много, либо считывая кол-во зданий от ' ' до ' ', а года от ' ' до '\n' , либо проверяя являются ли они частями( есть готовые функции в STL), либо игнорируя сколько то первых символов.
Ну и потом сравнивать год структуры или объекта и складывать кол-во зданий.

Добавлено через 1 минуту
попробую написать через объекты сейчас

Добавлено через 19 часов 4 минуты
честно говоря забил делать это через объекты т.к. надо разбираться с выделением памяти и указателями, сделал проще
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
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include <iomanip>
#include <cstdlib>
using namespace std;
 
int main()
{
    int sum=0;
    int counter=0;
    int s,cntr;
    cntr=0;
    int nb, year;
    string namefile;
    cout<<"Please enter created file name:  ";
    cin>>namefile;
    namefile.append(".txt\0");
    cout<<"Created file:    "<<namefile;
    ofstream ofs(namefile.c_str()); //создаем сам файл т.к. fstream его не создаст
    ofs.close();
    fstream f;
    f.open(namefile.c_str());//создание потока
    cout<<"\nInput the number of strings:   ";
    cin>>s;//количество строк в файле
    string str;
    for(int i=0;i<s;i++)//считывание строк с консоли и перевод в поток
    {
    cout<<"String number "<<i+1<<endl;
    cout<<"please enter street name:    ";
    cin>>str;
    f<<str<<"   ";
    cout<<"please enter number builds:  ";
    cin>>nb;
    cout<<"please enter year of builds: ";
    f<<right<<nb<<"   ";
    cin>>year;
    f<<right<<year<<"\n";
    cntr++;
    }
    f.clear();
    f.seekg(0);
    int counterIndexArray=0;
    int *cntrNumber=new int[s];
    int *cntYear=new int[s];
        while(!f.eof())
        {
 
        f>>str;
        if (f.eof())
        break;
            switch (counter)
            {
            case 0:
            cout<<"\nName of street:"<<str<<endl;
 
            break;
 
            case 1:
            cout<<"number:"<<str<<endl;
            cntrNumber[counterIndexArray]=atoi( str.c_str() );
            break;
 
            case 2:
            cout<<right<<"year:"<<str<<endl;
            cntYear[counterIndexArray]=atoi( str.c_str() );
            break;
            }
        counter++;
            if (counter==3)
            {
            counterIndexArray++;
            counter=0;
            }
        }
    int valYear;
    cout<<"\nPlease enter year:";
    cin>>valYear;
    for (int i=0;i<s;i++)
    {
    if (cntYear[i]==valYear)
    sum+=cntrNumber[i];
    }
    cout<<"sum="<<sum;
    f.close();
    return 0;
}
Yandex
Объявления
04.11.2013, 18:44     Строки в консоли и файлах(потоках).Зацикливание
Ответ Создать тему
Опции темы

Текущее время: 17:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru