Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Senarist
50 / 54 / 34
Регистрация: 14.03.2014
Сообщений: 657
1

Чтение текстового файла

12.08.2015, 11:34. Просмотров 430. Ответов 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
#include<iostream>
using namespace std;
struct spip 
{
    char name[20];
    double sum;
};
 
int main()
{
    int s = 0, k = 0;
    int patrons;
    cout<<"Enter the number of patrons: ";
    cin>>patrons;
    spip* ps = new spip[patrons];
    cout<<"Enter name and sum of donation \n";
    for (int i = 0; i<patrons; i++)
    {
        cin.ignore();
        cout<<"Name: ";
        cin.get((ps+i)->name,20);
        cout<<"Sum: ";
        cin>>(ps+i)->sum;
        if ((ps+i)->sum > 10000)
            s=s+1;
        else
            k=k+1;
                
    }
    cout<<"Grand patrons: \n";
    if (s>0) {
    for (int i = 0; i<patrons; i++)
    {
            if (((ps+i)->sum)>10000) 
        cout<<(ps+i)->name<<"\n";
                                    
    } 
            }
    else
    cout<<"none";
    cout<<"\n\nPatrons: \n";
    if (k>0){
    for (int i = 0; i<patrons; i++)
    {
            if (((ps+i)->sum)<10000 )
        cout<<(ps+i)->name<<"\n";
            
        
    }
            }
    else
    cout<<"none";
    delete [] ps;
    return 0;
}
Теперь нужно сделать тоже самое, но только считать с текстового файла.
К примеру в текстовом файле записано следующее:
2
Sam Stone
9000
Rich Raptor
33400

Попробовал написать:

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
#include<iostream>
#include<fstream>
using namespace std;
struct spip 
{
    char name[20];
    double sum;
};
 
int main()
{
    ifstream inFile;
    inFile.open("text.txt");
    int s = 0, k = 0;
    int patrons;
    inFile>>patrons;
    spip* ps = new spip[patrons];
    int i = 0;
    while (inFile.good() && i<patrons)
    {
 
        inFile.get((ps+i)->name,20);
        inFile>>(ps+i)->sum;
        if ((ps+i)->sum > 10000)
            s=s+1;
        else
            k=k+1;
        i++;
                
    }
    if(inFile.eof())
        cout<<"End of file reached\n";
    cout<<patrons<<endl;
    cout<<"Grand patrons: \n";
    if (s>0) {
        for (int i = 0; i<patrons; i++)
        {
            if (((ps+i)->sum)>10000) 
        cout<<(ps+i)->name<<"\n";
                                    
        } 
              }
    else
        cout<<"none";
    cout<<"\nPatrons: \n";
    if (k>0){
        for (int i = 0; i<patrons; i++)
        {
            if (((ps+i)->sum)<10000 )
        cout<<(ps+i)->name<<"\n";
            
        }
            }
    else
        cout<<"none";
    delete [] ps;
    inFile.close();
    return 0;
}
В итоге вывелась какая то фигня. Где я напартачил?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2015, 11:34
Ответы с готовыми решениями:

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt;...

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла?
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них...

Чтение из текстового файла
Здравствуйте, Уважаемые форумчане. Возникла такая проблема. Надо считать из...

Чтение из текстового файла
как сделать чтобы прога выводила на экран слова из текстового документа пока не...

Чтение текстового файла
Помогите с программой, пожалуйста. В ворде код программы, а в текстовом файле...

8
ture
528 / 336 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
12.08.2015, 12:33 2
C++
1
(inFile>>(ps+i)->sum).get();
0
Senarist
50 / 54 / 34
Регистрация: 14.03.2014
Сообщений: 657
12.08.2015, 12:53  [ТС] 3
ture не помогло.
0
Velesthau
524 / 426 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
12.08.2015, 13:11 4
C++
1
inFile.ignore(numeric_limits<streamsize>::max(), '\n');
Перед чтением вот этим: inFile.get((ps + i)->name, 20);
0
ture
528 / 336 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
12.08.2015, 13:15 5
C++
1
2
if(!inFile.is_open())
        return 0;
Добавлено через 1 минуту
C++
1
(inFile >> patrons).get();
Добавлено через 1 минуту
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
#include<iostream>
using std::cout;
using std::endl;
#include<fstream>
using std::ifstream;
 
struct spip {
    char name[20];
    double sum;
};
 
int main() {
    ifstream inFile;
    inFile.open("text.txt");
    int patrons;
    if(!inFile.is_open())
        return 0;
 
    (inFile >> patrons).get();
 
    spip* ps = new spip[patrons];
    
    int i = 0, s = 0, k = 0;
    while(inFile.good() && i<patrons) {
        inFile.get((ps + i)->name, 20);
        (inFile >> (ps + i)->sum).get();
 
        if((ps + i)->sum > 10000)
            s = s + 1;
        else
            k = k + 1;
        i++;
    }
    if(!inFile)
        cout << "End of file reached\n";
    inFile.close();
 
    cout << patrons << endl;
    cout << "Grand patrons: \n";
    if(s>0) {
        for(int i = 0; i<patrons; i++) {
            if(((ps + i)->sum)>10000)
                cout << (ps + i)->name << endl;
 
        }
    } else
        cout << "none";
 
    cout << "\nPatrons: \n";
    if(k>0) {
        for(int i = 0; i<patrons; i++) {
            if(((ps + i)->sum)<10000)
                cout << (ps + i)->name << endl;
 
        }
    } else
        cout << "none";
 
    delete[] ps;
    
    return 0;
}
Добавлено через 1 минуту
а чяво без нотации массива?
1
Senarist
50 / 54 / 34
Регистрация: 14.03.2014
Сообщений: 657
12.08.2015, 13:32  [ТС] 6
ture Вы имеете ввиду про переменные s,k ?
0
ture
528 / 336 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
12.08.2015, 13:51 7
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
#include<iostream>
using std::cout;
using std::endl;
#include<fstream>
using std::ifstream;
 
struct spip {
    char name[20];
    double sum;
};
 
int main() {
    ifstream inFile;
    inFile.open("text.txt");
    int patrons;
    if(!inFile.is_open())
        return 0;
 
    (inFile >> patrons).get();
 
    spip* ps = new spip[patrons];
    
    int i = 0, s = 0, k = 0;
    while(inFile.good() && i<patrons) {
        inFile.get(ps[i].name, 20);
        (inFile >> ps[i].sum).get();
 
        if(ps[i].sum > 10000)
            s = s + 1;
        else
            k = k + 1;
        i++;
    }
    if(!inFile)
        cout << "End of file reached\n";
    inFile.close();
 
    cout << patrons << endl;
    cout << "Grand patrons: \n";
    if(s>0) {
        for(int i = 0; i<patrons; i++) {
            if(ps[i].sum>10000)
                cout << ps[i].name << endl;
 
        }
    } else
        cout << "none";
 
    cout << "\nPatrons: \n";
    if(k>0) {
        for(int i = 0; i<patrons; i++) {
            if(ps[i].sum<10000)
                cout << ps[i].name << endl;
 
        }
    } else
        cout << "none";
 
    
    delete[] ps;
    system("pause");
    return 0;
}
0
Senarist
50 / 54 / 34
Регистрация: 14.03.2014
Сообщений: 657
12.08.2015, 13:58  [ТС] 8
а ну разницы же никакой нету)
Да и Прата писал что если используете указатели то пользуйтесь ->
0
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
13.08.2015, 09:15 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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
struct spip 
{
    char name[20];
    double sum;
};
 
int main()
{
    ifstream inFile;
    inFile.open("text.txt");
    if (!inFile)
    {
        cout << "Error!" << endl;
        return 0;
    }
    
    int s = 0, k = 0;
    int patrons;
    (inFile >> patrons).get();
    spip* ps = new spip[patrons];
    int i = 0;
    while (inFile.good() && i < patrons)
    {
        inFile.getline((ps + i) ->name, 20);
        (inFile >> (ps + i) ->sum).get();
        if ((ps + i) ->sum > 10000)
            ++s;
        else
            ++k;
        i++;
    }
    if(inFile.eof())
        cout << "End of file reached\n";
    inFile.close();
 
    cout << patrons << endl;
    cout<<"Grand patrons: \n";
    if (s > 0) 
    {
        for (int i = 0; i < patrons; i++)
        {
            if (((ps + i) ->sum) > 10000) 
                cout << (ps + i) ->name << "\n";
        } 
    }
    else
        cout<<"none";
    cout<<"\nPatrons: \n";
    if (k > 0)
    {
        for (int i = 0; i < patrons; i++)
        {
            if (((ps + i) ->sum) < 10000 )
                cout << (ps + i) ->name << "\n";
        }
    }
    else
        cout<<"none";
    delete [] ps;
   
    return 0;
}
0
Миниатюры
Чтение текстового файла  
13.08.2015, 09:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2015, 09:15

Чтение из текстового файла
вот этот кусок кода как будет выглядит на с++? begin ...

Чтение из текстового файла
Условие задачи: В текстовый фаил (c:\program\zitel.txt) записаны: -...

Чтение текстового файла
Всем привет. Не могу понять как читать из текстового файла значения разных...


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

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

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