Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16

Не могу разобраться с чтением из файла и вводом текстовых данных в массив

07.06.2012, 13:46. Показов 1495. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго все времени суток.
Помогите с одной задачей.
Условие задачи такое:
В файле содержатся сведения о сотрудниках лаборатории: фамилия, год рождения, пол, образование (среднее, высшее), год поступления на работу. Считать данные из файла в односвязный линейный список. Найти самого старшего сотрудника среди мужчин.
Код у меня такой:
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
#include "stdafx.h"
#include <fstream>
#include <string>
#include <conio.h>
#include <time.h>
#include "iostream." 
using namespace std;
 
int main()
 
{ int m=6, n=0;
char i;
char j;
int** matrix;
struct tm *local;
time_t t;
char str[80];
ifstream f("data.txt"); 
char line[64];
 
   cout<<"Text in the file:" <<endl ;
   while (true)
   {  
       if (!f.eof())
       {
      f.getline(line, sizeof(line));
      cout << line << endl;
        }
       else
       break;
       ++n;
   } 
   n=n-1;
   cout<<"We have "<<n<<" rows"<<endl;
   t = time(NULL);
   local = localtime(&t);
   cout<<"Year:";
   strftime(str, 100, "%Y", local);
   printf(str);
cout<<endl;
cout<<"Number of rows: ";
cout<<n<<endl;
cout<<"Number of columns: ";
cout<<m<<endl;
//вот отсюда начинается я так понимаю бред.
matrix=new int*[n];
for(int i=0;i<n;++i) matrix[i]=new int[m];
for(int i=0;i<n;++i)
{
for (int j=0; j<m; ++j)
{
ifstream input_file("data.txt"); //видимо так делать нельзя?
while (! input_file.eof())
 
   { 
      input_file>> matrix[i][j]; 
      
   } 
 cin>>matrix[i][j];
} }
cout<<"Here is your matrix:\n";
for(int i=0;i<n;++i)
{
for (int j=0; j<m; ++j)
cout<<matrix[i][j]<<" "; cout<<endl;
}
 
   getch();
}
Сам файл такой:
Gorchakov 1991 male high education 2010
Karpyshina 1993 female without education 2045
Glushko 1990 male high awesome 2009
Borodina 1991 female without education 2012
Danilov 1991 male high education 2012
Bulgakov 1993 male without education 2008
Moroz 0000 male without education 0000

Я хочу взять текст, сунуть в матрицу, и уже по матрице искать. Но все затормозилось на переносе текста в матрицу.
Пишу в visual 10, он ошибки не выдает пока не начинает компилировать, и как раз в моменте переноса, выскакивает кучу виндовских ошибок.
Подскажите что нет так? Или чтивом каким помогите. А то уже совсем выбился из сил.
Заранее благодарю.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.06.2012, 13:46
Ответы с готовыми решениями:

Не могу разобраться с чтением из файла
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;time.h&gt; #include &lt;fstream&gt; int...

Не могу разобраться с чтением данных из Word файлов
Я начинающий программист. Стоит задача считать текстовые данные и изображения из файла Word и загрузить в создаваемое приложение. С файлами...

Не могу разобраться с чтением файла и последующего вывода в консоль
У меня задание. Из файла Hello.txt вывести текст (конкретно &quot;Hello world!&quot;). Поиск по форуму привел меня к такому коду: #define...

11
92 / 88 / 17
Регистрация: 13.11.2011
Сообщений: 193
07.06.2012, 15:46
читает из input.txt записывает в output.txt:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
using namespace std;
int main(){
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    string lastName[7],sex[7],education[7],education2[7];
    int birth[7],year[7];
    for (int i=0; i<7; i++){
        cin>>lastName[i]>>birth[i]>>sex[i];
        cin>>education[i]>>education2[i]>>year[i];
    }
    int min=0;
    for (int i=0; i<7; i++)
        if (sex[i]=="male" && birth[i]<birth[min]) min=i;
    cout<<lastName[min]<<" "<<birth[min]<<" "<<sex[min];
    cout<<" "<<education[min]<<" "<<education2[min]<<" "<<year[min];
    return 0;
}
я так понимаю самый старший мужчина это мороз?
1
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
07.06.2012, 16:12
В задании шла речь о том, чтобы списать файл в список, мне кажется это сделать лучше так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>  
#include <list>  
#include <algorithm>
#include <string>
#include <fstream> 
using namespace std; 
int main() 
{   
    list<string> ilist; 
    ifstream ifile("Text.txt"); 
 
    istream_iterator<string> iter; 
    istream_iterator<string> end; 
 
    cout << endl; 
 
    ostream_iterator<string> ositer(cout,"\n"); 
 
    copy(ilist.begin(), ilist.end(), ositer); 
    cout << endl; 
    return 0;
}
Добавлено через 5 минут
этот код не правильный надо дописать и подключить Iterator
1
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
07.06.2012, 16:19  [ТС]
Цитата Сообщение от rinat_w Посмотреть сообщение
читает из input.txt записывает в output.txt:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
using namespace std;
int main(){
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    string lastName[7],sex[7],education[7],education2[7];
    int birth[7],year[7];
    for (int i=0; i<7; i++){
        cin>>lastName[i]>>birth[i]>>sex[i];
        cin>>education[i]>>education2[i]>>year[i];
    }
    int min=0;
    for (int i=0; i<7; i++)
        if (sex[i]=="male" && birth[i]<birth[min]) min=i;
    cout<<lastName[min]<<" "<<birth[min]<<" "<<sex[min];
    cout<<" "<<education[min]<<" "<<education2[min]<<" "<<year[min];
    return 0;
}
я так понимаю самый старший мужчина это мороз?
Да, мороз)
Можно вопрос?
я так понимаю что после freopen оператор cin читает только с файла? так?
0
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
07.06.2012, 16:22
Рабочий код
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 <list> 
#include <iterator>
#include <algorithm>
#include <string>
#include <fstream> 
using namespace std; 
int main() 
{   
    list<string> ilist; // создаём список
    ifstream infile("Text.txt"); // входной файловый объект
 
    istream_iterator<string> iter(infile); // потоковые итераторы
    istream_iterator<string> end;  
 
    copy(iter, end, back_inserter(ilist)); // копируем данные из входного файла в список
 
    cout << endl; 
 
    ostream_iterator<string> ositer(cout,"\n"); // потоковый итератор
 
    copy(ilist.begin(), ilist.end(), ositer);  
    cout << endl;  
 
    
    return 0;
}
1
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
07.06.2012, 16:55  [ТС]
Цитата Сообщение от David Sylva Посмотреть сообщение
Рабочий код
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 <list> 
#include <iterator>
#include <algorithm>
#include <string>
#include <fstream> 
using namespace std; 
int main() 
{   
    list<string> ilist; // создаём список
    ifstream infile("Text.txt"); // входной файловый объект
 
    istream_iterator<string> iter(infile); // потоковые итераторы
    istream_iterator<string> end;  
 
    copy(iter, end, back_inserter(ilist)); // копируем данные из входного файла в список
 
    cout << endl; 
 
    ostream_iterator<string> ositer(cout,"\n"); // потоковый итератор
 
    copy(ilist.begin(), ilist.end(), ositer);  
    cout << endl;  
 
    
    return 0;
}
Тоже большое спасибо) тоже работает. Благодарю. Особенно за комментарии.

Добавлено через 3 минуты
На самом деле задача полностью выглядела вот так : В файле содержатся сведения о сотрудниках лаборатории: фамилия, год рождения, пол, образование (среднее, высшее), год поступления на работу. Считать данные из файла в односвязный линейный список. Найти самого старшего сотрудника среди мужчин. Вывести список молодых специалистов (до 28 лет) с высшим образованием.
Собственно готовый код :
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
#include "stdafx.h"
#include <string>
#include <conio.h>
#include<iostream>
using namespace std;
int main(){
    freopen("input.txt","r",stdin);
    string lastName[7],sex[7],education[7],education2[7];
    int birth[7],year[7];
    for (int i=0; i<7; i++){
        cin>>lastName[i]>>birth[i]>>sex[i];
        cin>>education[i]>>education2[i]>>year[i];
    }
    int min=0;
    for (int i=0; i<7; i++){
        if (sex[i]=="male" && birth[i]<birth[min]) min=i;}
    cout<<lastName[min]<<" "<<birth[min]<<" "<<sex[min];
    cout<<" "<<education[min]<<" "<<education2[min]<<" "<<year[min]<<endl;
    int date=28;
    for (int i=0; i<7; i++){
        if (education[i]=="high" && birth[i]<birth[date])
            cout<<lastName[i]<<" "<<birth[i]<<" "<<sex[i]<<" "<<education[i]<<" "<<education2[i]<<" "<<year[i]<<endl;}
    getch();
    return 0;
}
всем спасибо, все работает
0
92 / 88 / 17
Регистрация: 13.11.2011
Сообщений: 193
07.06.2012, 18:01
wolfpredator,
подожди ка...
C++
1
2
int date=28;
if (... && birth[i]<birth[date])
в массиве birth всего 7 элементов, как это?
может лучше сделать так:
C++
1
2
int date=28;
if (... && birth[i]<date)
и почему вообще date=28?
0
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
07.06.2012, 18:07  [ТС]
Цитата Сообщение от rinat_w Посмотреть сообщение
wolfpredator,
подожди ка...
C++
1
2
int date=28;
if (... && birth[i]<birth)[date]
в массиве birth всего 7 элементов, как это?
может лучше сделать так:
C++
1
2
int date=28;
if (... && birth[i]<date)
и почему вообще date=28?
Да. Вы правы. У меня просто закомменчина была вот эта часть
C++
1
if (... && birth[i]<date)
а сюда код вставил и коммент удали. Потом всплыла ошибка.
Вроде поправил:
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
#include "stdafx.h"
#include <string>
#include <conio.h>
#include<iostream>
#include <time.h>
using namespace std;
int main(){
    struct tm *local;
time_t t;
    freopen("input.txt","r",stdin);
    string lastName[7],sex[7],education[7],education2[7];
    int birth[99],year[7];
    char str[4];
    for (int i=0; i<7; i++){
        cin>>lastName[i]>>birth[i]>>sex[i];
        cin>>education[i]>>education2[i]>>year[i];
    }
    int min=0;
    cout<<"The oldest man:"<<endl;
    for (int i=0; i<7; i++){
        if (sex[i]=="male" && birth[i]<birth[min]) min=i;}
    cout<<"Last Name:"<<lastName[min]<<endl<<"Birth: "<<birth[min]<<endl<<"Sex: "<<sex[min]<<endl;
    cout<<"Education: "<<education[min]<<" "<<education2[min]<<endl<<"Hired in: "<<year[min]<<endl;
    int date=28;
    t = time(NULL);
   local = localtime(&t);
   strftime(str, 100, "%Y", local);
   cout<<endl<<endl<<"Now year:"<<str<<endl<<endl<<endl<<endl;
   cout<<"Spe******ts with higher education are not afraid of 28 years old:"<<endl;
   int y=atoi(str);
   int d=0;
    for (int i=0; i<7; i++){
    birth[d]=y-birth[i];
        if (education[i]=="high" && birth[d]<date)
    cout<<"Last Name:"<<lastName[i]<<endl<<"Birth: "<<birth[i]<<endl<<"age: "<<birth[d]<<endl<<"Sex: "<<sex[i]<<endl<<"Education: "<<education[i]<<" "<<education2[i]<<endl<<"Hired in: "<<year[i]<<endl<<endl<<endl;
    }
    getch();
    return 0;
}
Теперь точно все верно) Спасибо)
0
92 / 88 / 17
Регистрация: 13.11.2011
Сообщений: 193
07.06.2012, 20:18
wolfpredator, мдааа... опять ошибка)
C++
1
2
3
int d=0;
for (int i=0; i<7; i++){
birth[d]=y-birth[i];
переменная d никогда не изменяется это значит что другие birth[1]..birth[6] не изменятся, лучше замени d на i
и еще
C++
1
int birth[99]
там же всего 7 человек...
1
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
07.06.2012, 22:52  [ТС]
Цитата Сообщение от rinat_w Посмотреть сообщение
wolfpredator, мдааа... опять ошибка)
C++
1
2
3
int d=0;
for (int i=0; i<7; i++){
birth[d]=y-birth[i];
переменная d никогда не изменяется это значит что другие birth[1]..birth[6] не изменятся, лучше замени d на i
и еще
C++
1
int birth[99]
там же всего 7 человек...
почему не изменится???? если
C++
1
birth[d]=y-birth[i];
грубо говоря. дельта = нынешний год - год рождения. И с каждым последующим i, d будет меняться. Пример - d=2012-1991 - 21 ,а d=2012-1993=19. Плюс, в теории, "y" с каждым годом будет другой. А про [99] - баловался, забыл поменять, спасибо.
0
92 / 88 / 17
Регистрация: 13.11.2011
Сообщений: 193
07.06.2012, 23:54
wolfpredator, неее, не правильно мыслишь d изменится только тогда когда с ним будут проведены какие-нибудь арифметические операции, т.е. d++ или d--. Есть всего семь разных переменных - birth[0], birth[1], ... birth[6], а d это порядковый номер переменной. Например birth[d]=birth[d]+1; здесь переменная birth[d] увеличивается на единицу, а d остается неизменной
1
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
07.06.2012, 23:58  [ТС]
Цитата Сообщение от rinat_w Посмотреть сообщение
wolfpredator, неее, не правильно мыслишь d изменится только тогда когда с ним будут проведены какие-нибудь арифметические операции, т.е. d++ или d--. Есть всего семь разных переменных - birth[0], birth[1], ... birth[6], а d это порядковый номер переменной. Например birth[d]=birth[d]+1; здесь переменная birth[d] увеличивается на единицу, а d остается неизменной
А...ну да... тоже верно) Спасибо. Хоть разобрался немного.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.06.2012, 23:58
Помогаю со студенческими работами здесь

не могу разобраться с вводом и выводом данных
1. как считать из файла input считать массив (и как его правильно там записать) 2. как правильно подать на запись в файл output то, что...

Не могу разобраться с повторным вводом данных без выхода из программы
Добрый день. Не понимаю как сделать, чтобы программа после вывода результата на экран предлагала ввести данные снова. Так же нужно...

Не могу разобраться чтением и записью в файл
Тема моей курсовой работы &quot;разработка программы определения размера стихотворения&quot;. В краце мне нужно считать из текстового файла все...

одномерный массив c вводом данных из файла
Дан одномерный массив целых чисел (n = 15), заполненный случайным образом числами из промежутка . - Удалить из него все элементы,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru