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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Senarist
38 / 38 / 12
Регистрация: 14.03.2014
Сообщений: 579
#1

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

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

Чтение из текстового файла - C++
Всем доброго времени суток. Допустим у меня есть файл (file.txt) Содержание текстового файла: { 12:20 13:10 13:20 }...

Чтение текстового файла - C++
Помогите с программой, пожалуйста. В ворде код программы, а в текстовом файле то, что должно быть на выходе.

Чтение из текстового файла - C++
Нашел программу для чтения из файла информации: Номер предмета, Наименование, Фамилия. Помогите создать текстовый документ под программу,...

Чтение текстового файла - C++
здравствуйте. у меня не получается считать текстовый файл. сам файл имеет имеет жесткую структуру: первая строка число(по сути колличество...

Чтение из текстового файла - C++
Здравствуйте, Уважаемые форумчане. Возникла такая проблема. Надо считать из файла(внешнего) данные тип int и char- это 2 разных файла, в...

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

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

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

Чтение из текстового файла - C++
вот этот кусок кода как будет выглядит на с++? begin assign(input,'input.txt'); reset(input); assign(output,'output.txt');...

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

Чтение и запись текстового файла - C++
Проблема в том, что написала самый обычный, самый стандартный код для чтения и записи текстового файла. Во-первых он всегда мне пишет...

Чтение по строкам из текстового файла - C++
Как взять каждую строку из файла и присвоить каждой свою переменную? Содержание файла: intro 80 4 114 76

Чтение матрицы из текстового файла - C++
Задание: При помощи случайных чисел ввести матрицу А (7х7). Записать значение матрицы в текстовой файл и сохранить файл. Прочитать из...


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

Или воспользуйтесь поиском по форуму:
lss
921 / 851 / 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     Чтение текстового файла
Ответ Создать тему
Опции темы

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