Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
1

Прочитать одной строкой с файла

13.12.2012, 16:50. Просмотров 428. Ответов 9
Метки нет (Все метки)

собственно в этом и вопрос, как считать целой строкой

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
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <fstream>              
using namespace std;
 
void process_all_transactions
        (
            istream& in, 
            ostream& err,
            double& total_of_spendings,
            int& total_of_shares
 
        );
    
int main ()
{
    int tot_shares       = 0;
    double tot_spendings = 0;
    ifstream infile;
    string my_file;
    string line_transaction;
    string line;
    
    cout<<"This program calculates your profit/loss for all your investments in one share."<<endl;
    cout<<"enter file name"<<endl;
    cin>>my_file;
    infile.open(my_file.c_str());//correct data type from string
    if (!infile)
    {
    cerr<<"could not open file"<<endl;
    return 1;
    }
 
       while(infile>>line_transaction)
       {
        
    
  
cout<<line_transaction<<endl;
 
}
infile.close();
  
    return 0;
}
0
Вложения
Тип файла: txt my_file.txt (32 байт, 3 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2012, 16:50
Ответы с готовыми решениями:

Прочитать файл в обратном порядке т.е. встать в конец файла и прочитать до начальной позиции
подскажите пожалуйста как можно прочитать файл в обратном порядке т.е. стать в...

Массив на вход одной строкой
Доброго времени суток, форумчане) Задача следующая: надо строку, подающуюся на...

Двумерный массив одной строкой.
Здравствуйте. Вот такая программа: На основе исходных массивов A и B (n и m –...

Почему распечатка не заканчивается одной строкой?
#include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace...

Ввод одномерного массива одной строкой
Получил в универе задание где в одной из его частей указано, что нужно ввести...

9
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
13.12.2012, 17:12  [ТС] 2
пробовала так,не работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
if (!infile)
    {
    cerr<<"could not open file"<<endl;
    return 1;
    }
     else
      while( (!infile.eof()))
       {
         
        getline(cin, line_transaction);
        cout<<line_transaction<<endl;
 
        }
0
MrGluck
Модератор
Эксперт CЭксперт С++
8088 / 4941 / 1431
Регистрация: 29.11.2010
Сообщений: 13,405
13.12.2012, 17:14 3
C++
1
2
3
4
5
6
7
8
9
10
std::ifstream ifstext("text.txt");
if (!ifstext)
{
    std::cerr<< "No file\n";
    return 1;
}
std::string text;
ifstext >> std::noskipws; // clears the scipws flag for the str stream
std::copy(std::istream_iterator<char>(ifstext), std::istream_iterator<char>(), 
      std::back_inserter(text) );
0
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
13.12.2012, 17:24  [ТС] 4
спасибо) но я ничего не понимаю. можно это как-то попроще, чтобы чайнику было понятно...

Добавлено через 1 минуту
без итератора и этого мне неизвестного флага
0
MrGluck
Модератор
Эксперт CЭксперт С++
8088 / 4941 / 1431
Регистрация: 29.11.2010
Сообщений: 13,405
13.12.2012, 17:40 5
C++
1
2
3
4
5
6
7
8
9
10
11
std::ifstream ifstext("input.txt");
if (!ifstext)
{
    std::cerr<< "No file\n";
    return 1;
}
std::string text;
ifstext >> std::noskipws; // clears the scipws flag for the str stream
char c;
while (!ifstext.eof() && ifstext >> c)
    text += c;
Без флага функции noskipws результат неверный
0
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
13.12.2012, 17:48  [ТС] 6
для этого флага надо специальную библиотеку?
я написала так, но ниче не происходит
C++
1
2
3
4
5
6
7
8
9
10
if (!infile)
 
    {
    cerr<<"could not open file"<<endl;
    return 1;
    }
     infile>>std::noskipws;
     char c;
     while(!infile.eof()&& infile>>c)
     line_transaction=line_transaction+c;
0
MrGluck
Модератор
Эксперт CЭксперт С++
8088 / 4941 / 1431
Регистрация: 29.11.2010
Сообщений: 13,405
13.12.2012, 17:49 7
letnjaja, а если файл такой:
Код
    abcde fdsh
asd dsgh
asd dshg
fff fffff
1
222 22
0
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
14.12.2012, 04:12  [ТС] 8
с файла информация считывается, только вот почему то я не могу ее использовать в функции и вывести результат, подкорректируйте кто-нибудь и объясните почему?
как сделать, чтобы сообщения об ошибке записывались в другой файл?
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
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <fstream>              
using namespace std;
 
void process_all_transactions
        (
            istream& in, 
            ostream& err,
            double& total_of_spendings,
            int& total_of_shares
 
        );
 void process_all_transactions(ifstream &in)
{
    int total_of_shares =0      ;
    double total_of_spendings=0 ;
    float number_of_shares=0;
    float total=0;
    string line_transaction;
    string line;
    istringstream iss; // v potok
 
 
    float price_per_share;
 
       while(getline(in,line_transaction))
    {
        iss.clear();
            iss.str(line); //iss chitaet iz peremennoj
           
            iss >> number_of_shares >> price_per_share ;
        cout << number_of_shares<<" "<<price_per_share<<endl;
             cout<<"----------------"<<endl;      
                if(price_per_share <0 ||
         (-number_of_shares>total_of_shares))
                {
                     cout<< "No valid data"<< endl;
                }
                else
                {
                    total_of_shares += number_of_shares;
                    total_of_spendings += number_of_shares*price_per_share;
                }
          
        }
   cout<<total_of_shares<<endl;
   cout<<total_of_spendings<<endl;
}
   
int main ()
{
    ifstream infile;
    string my_file;
    string line_transaction;
    string line;
    float price_per_share;
    int number_of_shares;
    string comment;
    
    stringstream iss;
    
    cout<<"This program calculates your profit/loss for all your investments in one share."<<endl;
    cout<<"enter file name"<<endl;
    cin>>my_file;
    infile.open(my_file.c_str());//correct data type from string
    if (!infile)
    {
    cerr<<"could not open file"<<endl;
    return 1;
    }
     /* while (getline(infile, line))
      {
      iss.clear();
      iss.str(line);
      iss>>number_of_shares>>price_per_share>>comment;
      cout << line << endl;
      }*/
      process_all_transactions(infile);
     
     infile.close();
    
    return 0;
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
8088 / 4941 / 1431
Регистрация: 29.11.2010
Сообщений: 13,405
14.12.2012, 04:22 9
как сделать, чтобы сообщения об ошибке записывались в другой файл?
перенаправить поток в ofstream

Добавлено через 4 минуты
C++
1
2
iss.clear();
iss.str(line); //iss chitaet iz peremennoj
C++
1
iss.str(line_transaction);
0
j_runner
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 26
14.12.2012, 04:49 10
почему функция не может получить переменные?
0
14.12.2012, 04:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2012, 04:49

Ввод/вычисление/вывод одной программной строкой
Здравствуйте) Есть вопрос, можно ли сделать по функционалу вот это: ...

Не могу разобраться с одной строкой кода (cout.precision)
Всего один маленький вопросик. Что делает вот эта строка cout.precision(3);...

Как скопировать массив в вектор одной строкой без использования циклов и алгоритмов STL?
Уважаемые формучане, не подскажете, как скопировать массив в вектор одной...


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

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

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