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

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

Восстановить пароль Регистрация
 
Senarist
32 / 32 / 10
Регистрация: 14.03.2014
Сообщений: 508
12.08.2015, 11:34     Чтение текстового файла #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
#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;
}
В итоге вывелась какая то фигня. Где я напартачил?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2015, 11:34     Чтение текстового файла
Посмотрите здесь:

C++ чтение с текстового файла
Чтение текстового файла C++
Чтение из текстового файла C++
Чтение из текстового файла C++
Чтение текстового файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
12.08.2015, 12:33     Чтение текстового файла #2
C++
1
(inFile>>(ps+i)->sum).get();
Senarist
32 / 32 / 10
Регистрация: 14.03.2014
Сообщений: 508
12.08.2015, 12:53  [ТС]     Чтение текстового файла #3
ture не помогло.
Velesthau
523 / 425 / 129
Регистрация: 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);
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
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 минуту
а чяво без нотации массива?
Senarist
32 / 32 / 10
Регистрация: 14.03.2014
Сообщений: 508
12.08.2015, 13:32  [ТС]     Чтение текстового файла #6
ture Вы имеете ввиду про переменные s,k ?
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
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;
}
Senarist
32 / 32 / 10
Регистрация: 14.03.2014
Сообщений: 508
12.08.2015, 13:58  [ТС]     Чтение текстового файла #8
а ну разницы же никакой нету)
Да и Прата писал что если используете указатели то пользуйтесь ->
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2015, 09:15     Чтение текстового файла
Еще ссылки по теме:

чтение из текстового файла C++
Чтение из текстового файла C++
C++ Чтение из текстового файла

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

Или воспользуйтесь поиском по форуму:
lss
919 / 849 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
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;
}
Миниатюры
Чтение текстового файла  
Yandex
Объявления
13.08.2015, 09:15     Чтение текстового файла
Ответ Создать тему
Опции темы

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