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

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

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

Из файла выводит только цифры - C++

10.05.2013, 21:29. Просмотров 960. Ответов 21
Метки нет (Все метки)

Есть массив структур, заданный файл, надо считать и вывести на экран
в структуре номер, фамилия, имя, отчество, институт, дата рождения, курс, средний балл, группа
так вот, все числовые значения он выводит, но символьные не хочет
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
int i;
        const int N=110;
        ifstream is;
        is.open("Студенты.txt");
        if(is==NULL)
        {
            cout<<"Нет файла";
            getch();
            exit(1);
        }
        int m=0;
        Students st[N];
        is>>st[m].Nom>>st[m].fio>>st[m].name>>st[m].otche>>st[m].date>>st[m].inst>>st[m].group>>st[m].kyrs>>st[m].ball;
        while (is.good()) //пока есть записи
        {
            m++;
            is>>st[m].Nom>>st[m].fio>>st[m].name>>st[m].otche>>st[m].date>>st[m].inst>>st[m].group>>st[m].kyrs>>st[m].ball;     
        }               
        
        if(st==NULL)
        {
            cout<<"Нет памяти";
            getch();
            exit(1);
        }       
        for(i=0;i<m+1; i++)
            is>>st[i].Nom>>st[i].fio>>st[i].name>>st[i].otche>>st[i].date>>st[i].inst>>st[i].group>>st[i].kyrs>>st[i].ball;
         
        is.close();     
        for(i=0; i<m+1;i++)
        {
            cout<<setw(5)<<setiosflags(ios::left)<<st[i].Nom
                <<setw(15)<<setiosflags(ios::left)<<st[i].fio
                <<setw(15)<<setiosflags(ios::left)<<st[i].name
                <<setw(15)<<setiosflags(ios::left)<<st[i].otche
                <<setw(4)<<setiosflags(ios::left)<<st[i].date
                <<setw(10)<<setiosflags(ios::left)<<st[i].inst
                <<setw(15)<<setiosflags(ios::left)<<st[i].group
                <<setw(2)<<setiosflags(ios::left)<<st[i].kyrs
                <<setw(3)<<setiosflags(ios::left)<<st[i].ball<<endl;
            if ((i+1)%10==0)
                getch();
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2013, 21:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из файла выводит только цифры (C++):

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

Файл: Из текста файла считать только цифры - C++
В общем мне надо чтобы из текста файла считывались только числа, например из предложения Today is 8th of August. Temperature is 28...

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

Написать программу, которая считывает текст из файла и выводит на экран только цитаты - C++
Вот код: #include &lt;fstream.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main() { clrscr(); ifstream fin(&quot;text.txt&quot;, ios::in...

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

Напишите программу, которая выводит на экран содержимое файла и выводит сумму чисел файла - C++
Напишите программу, которая выводит на экран содержимое файла D:\numbers.txt. и выводит сумму чисел файла. Вынужден снова просить...

21
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
10.05.2013, 23:22 #2
Yutra, больше чем уверен, проблема в том, что при считывание числа в потоке остается символ новой строки ('\n') который и записывается в ваши символьные массивы, решить это все можно вот так

C++
1
is.ignore();
перед каждым считыванием символов из файла
1
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
10.05.2013, 23:43 #3
Yutra, почему у Вас два цикла на чтение из файла?
0
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
11.05.2013, 14:34  [ТС] #4
Цитата Сообщение от kazak Посмотреть сообщение
Yutra, почему у Вас два цикла на чтение из файла?
так как структура динамическая, то сначала он проверяет сколько строк

Добавлено через 5 минут
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Yutra, больше чем уверен, проблема в том, что при считывание числа в потоке остается символ новой строки ('\n') который и записывается в ваши символьные массивы, решить это все можно вот так

C++
1
is.ignore();
перед каждым считыванием символов из файла
либо я не туда вставляю, либо не помогает(
0
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
11.05.2013, 16:25 #5
Цитата Сообщение от Yutra Посмотреть сообщение
так как структура динамическая
Звучит настораживающе. Как Вы структуру объявляли?
Цитата Сообщение от Yutra Посмотреть сообщение
то сначала он проверяет сколько строк
Чтобы так делать нужно после первого цикла сбрасывать флаги состояния файла и перемещать указатель файла на начало. Иначе во втором цикле чтения не будет вовсе.
0
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
11.05.2013, 16:30  [ТС] #6
Цитата Сообщение от kazak Посмотреть сообщение
Звучит настораживающе. Как Вы структуру объявляли?

Чтобы так делать нужно после первого цикла сбрасывать флаги состояния файла и перемещать указатель файла на начало. Иначе во втором цикле чтения не будет вовсе.
C++
1
2
3
4
5
6
7
8
struct Students
    {
        int Nom;
        char fio [10] ,name[10], otche [10];
        int date;
        char inst[10], group[10];
        int kyrs, ball;     
    };
0
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
11.05.2013, 17:17 #7
Так, а в файле как записи идут?
0
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
11.05.2013, 18:19  [ТС] #8
Цитата Сообщение от kazak Посмотреть сообщение
Так, а в файле как записи идут?
поля в строке через пробел, а каждая новая структура с новой строчки
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
11.05.2013, 19:44 #9
Yutra, а какие у вас поля символьные? я покажу как надо

Добавлено через 7 минут
Yutra, я конечно не знаю какие там у вас поля символьные, но вот как пример

C++
1
2
3
4
5
6
7
8
9
10
for(i=0;i<m+1; i++){
        is>>st[i].Nom;
        is.ignore();
        getline(is,st[i].fio);
        getline(is,st[i].name);
        getline(is,st[i].otche)
        is>>st[i].date;
        is.ignore();
        is >> st[i].inst>>st[i].group>>st[i].kyrs>>st[i].ball;
    }
ignore() ставьте после считывания целого и перед считыванием символов
0
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
12.05.2013, 17:36  [ТС] #10
выдает ошибку, что getline: индефикатор не найден
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
12.05.2013, 21:30 #11
Yutra,

C++
1
#include <string>
0
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
13.05.2013, 12:50  [ТС] #12
теперь выдает вот эти 2 ошибки на каждую строчку с getline
1)error C2784: std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &): не удалось вывести аргумент шаблон для "std::basic_string<_Elem,_Traits,_Alloc> &" из "char [15]"
2)error C2780: std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem): требует аргументов: 3, имеется: 2
я пробовала заменить getline(is, st[i]....) на getline (is>>st[i]....) первую ошибку убирал, а вторая оставалась
is.getline (is, st[i]....) тоже не помогло
я даже изменяла на is.getline(is>>st[i]....) выдает вот это
error C2661: std::basic_istream<_Elem,_Traits>::getline: нет перегруженной функции, принимающей 1 аргументов
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.05.2013, 13:03 #13
Yutra, покажите полностью фрагмент как вы делаете.
0
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
13.05.2013, 13:15  [ТС] #14
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Yutra, покажите полностью фрагмент как вы делаете.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(i=0;i<m+1; i++)
        {           
            is>>st[i].Nom;
            is.ignore();
            getline(is, st[i].fio);
            getline(is,st[i].name);
            getline(is,st[i].otche);            
            is>>st[i].date;
            is.ignore();
            getline(is,st[i].inst);
            getline(is,st[i].group);
            is>>st[i].kyrs>>st[i].ball;
            is.ignore();
        }
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.05.2013, 13:19 #15
Yutra, а поля у вас char или string?
0
13.05.2013, 13:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2013, 13:19
Привет! Вот еще темы с ответами:

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

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

Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых. - C++
Здравствуйте. Прошу помощи в написание программу на C &quot;Написать программу, которая считывает текст из файла и выводит на экран только...

Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых - C++
Начало уже есть, но что-то не тащит. Помогите пожалуйста... #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { FILE *f; ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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