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

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

Войти
Регистрация
Восстановить пароль
 
wolfpredator
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 16
#1

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

07.06.2012, 13:46. Просмотров 695. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2012, 13:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу разобраться с чтением из файла и вводом текстовых данных в массив (C++):

Не могу разобраться с чтением из файла - C++
#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...

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

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

Не могу разобраться с вводом числа в цикле - C++
Жирным выделено то, что ввожу я. Вот, что показывается в консоли: &quot;Введите число больше 10. 5. Вы ввели 5. Число меньше 10. Введите...

Динамический массив с вводом данных - C++
Ребят, сделал динамический массив, но кто может исправить где нужно, чтобы выводило их общую сумму? #include &lt;iostream&gt; #include...

Помогите разобраться с потоковым вводом/выводом в С++ - C++
как решить эти две задачи: 24.1 Для класса Т1, имеющего два целочисленных компонентных данных а и b с частным типом доступа, должна быть...

11
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 192
Завершенные тесты: 1
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;
}
я так понимаю самый старший мужчина это мороз?
1
David Sylva
1287 / 949 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
1
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 читает только с файла? так?
0
David Sylva
1287 / 949 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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;
}
1
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;
}
всем спасибо, все работает
0
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 192
Завершенные тесты: 1
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?
0
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;
}
Теперь точно все верно) Спасибо)
0
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 192
Завершенные тесты: 1
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 человек...
1
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] - баловался, забыл поменять, спасибо.
0
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 192
Завершенные тесты: 1
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 остается неизменной
1
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 остается неизменной
А...ну да... тоже верно) Спасибо. Хоть разобрался немного.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2012, 23:58
Привет! Вот еще темы с ответами:

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

Не могу разобраться почему не считывается массив - C++
//--------------------------------------------------------------------------- #pragma hdrstop ...

Некорректность работы программы при считывании текстовых данных с файла - C++
Здравствуйте!) Помогите, пожалуйста, решить данную проблему... Почему при следующем варианте кода, программа просто-напросто не...

Не могу разобраться как сделать ввод абонентов в программу из файла - C++
Есть код для реаоизации программы &quot;бибилотечный абонемент&quot;. Задание записано так: Разработать модель работы библиотечного абонемента....


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
07.06.2012, 23:58
Ответ Создать тему
Опции темы

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