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

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

Восстановить пароль Регистрация
 
wolfpredator
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
07.06.2012, 13:46     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #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
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, он ошибки не выдает пока не начинает компилировать, и как раз в моменте переноса, выскакивает кучу виндовских ошибок.
Подскажите что нет так? Или чтивом каким помогите. А то уже совсем выбился из сил.
Заранее благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2012, 13:46     Не могу разобраться с чтением из файла и вводом текстовых данных в массив
Посмотрите здесь:

C++ проблема с чтением файла
Помогите разобраться с потоковым вводом/выводом в С++ C++
C++ чтением из файла....
Некорректность работы программы при считывании текстовых данных с файла C++
C++ не могу разобраться с вводом и выводом данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 183
07.06.2012, 15:46     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #2
читает из 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;
}
я так понимаю самый старший мужчина это мороз?
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
07.06.2012, 16:12     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #3
В задании шла речь о том, чтобы списать файл в список, мне кажется это сделать лучше так
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
wolfpredator
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
07.06.2012, 16:19  [ТС]     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #4
Цитата Сообщение от 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 читает только с файла? так?
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
07.06.2012, 16:22     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #5
Рабочий код
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;
}
wolfpredator
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
07.06.2012, 16:55  [ТС]     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #6
Цитата Сообщение от 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;
}
всем спасибо, все работает
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 183
07.06.2012, 18:01     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #7
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?
wolfpredator
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
07.06.2012, 18:07  [ТС]     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #8
Цитата Сообщение от 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<<"Specialists 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;
}
Теперь точно все верно) Спасибо)
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 183
07.06.2012, 20:18     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #9
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 человек...
wolfpredator
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
07.06.2012, 22:52  [ТС]     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #10
Цитата Сообщение от 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] - баловался, забыл поменять, спасибо.
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 183
07.06.2012, 23:54     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #11
wolfpredator, неее, не правильно мыслишь d изменится только тогда когда с ним будут проведены какие-нибудь арифметические операции, т.е. d++ или d--. Есть всего семь разных переменных - birth[0], birth[1], ... birth[6], а d это порядковый номер переменной. Например birth[d]=birth[d]+1; здесь переменная birth[d] увеличивается на единицу, а d остается неизменной
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2012, 23:58     Не могу разобраться с чтением из файла и вводом текстовых данных в массив
Еще ссылки по теме:

C++ Не могу разобраться с чтением из файла
C++ Не могу разобраться с чтением файла и последующего вывода в консоль
C++ Не могу разобраться с вводом числа в цикле

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

Или воспользуйтесь поиском по форуму:
wolfpredator
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
07.06.2012, 23:58  [ТС]     Не могу разобраться с чтением из файла и вводом текстовых данных в массив #12
Цитата Сообщение от rinat_w Посмотреть сообщение
wolfpredator, неее, не правильно мыслишь d изменится только тогда когда с ним будут проведены какие-нибудь арифметические операции, т.е. d++ или d--. Есть всего семь разных переменных - birth[0], birth[1], ... birth[6], а d это порядковый номер переменной. Например birth[d]=birth[d]+1; здесь переменная birth[d] увеличивается на единицу, а d остается неизменной
А...ну да... тоже верно) Спасибо. Хоть разобрался немного.
Yandex
Объявления
07.06.2012, 23:58     Не могу разобраться с чтением из файла и вводом текстовых данных в массив
Ответ Создать тему
Опции темы

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