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

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

07.06.2012, 13:46. Показов 1440. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru