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

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

Восстановить пароль Регистрация
 
 
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
10.05.2013, 21:29     Из файла выводит только цифры #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
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();
        }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2013, 21:29     Из файла выводит только цифры
Посмотрите здесь:

написать программу в динамическом массиве , которая считывает текст из файла и выводит на экран только цитаты C++
Написать программу-фильтр, которая при нажатии любых клавиш выводит на экран только буквы и цифры, при этом указывая, что выводится: буква или цифра. C++
Нужна программа, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых C++
Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых C++
программу, которая считывает текст из файла и выводит на экран только предложения, начинающиеся с тире, перед которым могут находиться только пробелы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
10.05.2013, 23:22     Из файла выводит только цифры #2
Yutra, больше чем уверен, проблема в том, что при считывание числа в потоке остается символ новой строки ('\n') который и записывается в ваши символьные массивы, решить это все можно вот так

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

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

C++
1
is.ignore();
перед каждым считыванием символов из файла
либо я не туда вставляю, либо не помогает(
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
11.05.2013, 16:25     Из файла выводит только цифры #5
Цитата Сообщение от Yutra Посмотреть сообщение
так как структура динамическая
Звучит настораживающе. Как Вы структуру объявляли?
Цитата Сообщение от Yutra Посмотреть сообщение
то сначала он проверяет сколько строк
Чтобы так делать нужно после первого цикла сбрасывать флаги состояния файла и перемещать указатель файла на начало. Иначе во втором цикле чтения не будет вовсе.
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;     
    };
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
11.05.2013, 17:17     Из файла выводит только цифры #7
Так, а в файле как записи идут?
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
11.05.2013, 18:19  [ТС]     Из файла выводит только цифры #8
Цитата Сообщение от kazak Посмотреть сообщение
Так, а в файле как записи идут?
поля в строке через пробел, а каждая новая структура с новой строчки
yoghurt92
373 / 344 / 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() ставьте после считывания целого и перед считыванием символов
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
12.05.2013, 17:36  [ТС]     Из файла выводит только цифры #10
выдает ошибку, что getline: индефикатор не найден
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
12.05.2013, 21:30     Из файла выводит только цифры #11
Yutra,

C++
1
#include <string>
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 аргументов
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.05.2013, 13:03     Из файла выводит только цифры #13
Yutra, покажите полностью фрагмент как вы делаете.
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();
        }
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.05.2013, 13:19     Из файла выводит только цифры #15
Yutra, а поля у вас char или string?
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
13.05.2013, 13:29  [ТС]     Из файла выводит только цифры #16
yoghurt92, char
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.05.2013, 13:33     Из файла выводит только цифры #17
Yutra, тогда так

C++
1
is.getline(st[i].fio, /*размер поля*/);
или можете оставить как делали

C++
1
is >> st[i].fio;
getlain просто считывает игнорирую пробелы
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
13.05.2013, 14:02  [ТС]     Из файла выводит только цифры #18
yoghurt92, (( это не помогло, он все равно не считывает символы(
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.05.2013, 14:23     Из файла выводит только цифры #19
Yutra, покажите полностью код!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2013, 15:16     Из файла выводит только цифры
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Yutra
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 30
13.05.2013, 15:16  [ТС]     Из файла выводит только цифры #20
yoghurt92,
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
70
71
72
73
74
75
76
77
78
79
80
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <locale.h>
#include <fstream>
#include <cstdlib>
#include <windows.h>
#include <iomanip>
#include <string>
using namespace std;
 
struct Students
    {
        int Nom;
        char fio [15] ,name[15], otche [15];
        int date;
        char inst[10], group[10];
        int kyrs, ball;     
    };
    
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Rus");        
        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;
            is.ignore();
            is.getline(st[i].fio, 15);
            is.getline(st[i].name, 15);
            is.getline(st[i].otche, 15);            
            is>>st[i].date;
            is.ignore();
            is.getline(st[i].inst, 10);
            is.getline(st[i].group, 10);
            is>>st[i].kyrs>>st[i].ball;
            is.ignore();
        }
        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();
        }           
    getch();
    return 0;
}
Yandex
Объявления
13.05.2013, 15:16     Из файла выводит только цифры
Ответ Создать тему
Опции темы

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