0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 27
1

Некорректное считывание строки

22.06.2015, 20:02. Показов 673. Ответов 4
Метки нет (Все метки)

Собственно столкнулся с такой проблемой... Не считываются ФИО с пробелами. Либо, если юзаю gets, то во второй записи исчезает пункт ФИО. Да и выводится криво... Как организовать считывание и вывод этой строки с пробелами? Само задание:

Построить иерархию классов Человек (ФИО, возраст, пол) и Школьник(школа, класс) в каждом классе предусмотреть функции чтения/записи, конструкторы, деструкторы, и статическое поле "количество". Создать динамически 2 записи производного класса.





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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <malloc.h>
#include <string.h>
 
using namespace std;
class class1
{
private:
    static int count;
    int id;
protected:
    char *v;
    char *v1;
    double v2;
public:
    class1();
    ~class1();
    void out();
};
 
int class1::count = 0;
 
class1::class1()
{
    char v3[40];
    char v4[40];
    count++;
    id = count;
    cout << "Enter fio: ";
    cin >> v3;
 
 
// Вот это место
 
 
    v = new char[strlen(v3)];
    strcpy(v, v3);
    cout << "Enter pol: ";
    cin >> v4;
    v1 = new char[strlen(v4)];
    strcpy(v1, v4);
    cout << "vozrast= ";
    cin >> v2;
}
 
class1 :: ~class1()
{
    cout << "delite object: " << id << ". " << v << " " << v2 << " " << v1 << endl;
}
 
class class2 : public class1
{
protected:
    static int count;
    int id;
    char *v5;
    int v2_class2;
public:
    class2();
    ~class2();
    void out();
};
 
int class2::count = 0;
 
 
class2::class2() : class1()
{
    char v6[40]; 
    count++;
    id = count;
    cout << "shkola: ";
    cin >> v6;
    v5 = new char[strlen(v6)];
    strcpy(v5, v6);
    cout << "klass: ";
    cin >> v2_class2;
}
 
class2 :: ~class2()
{
    cout << "Delete object class2: " << id << ". " << v << " " << v2 << v5 << " " << "klass-" << v2_class2 << endl;
}
 
void class2::out()
{
         cout << id << ". " << v << " | " << "vozrast-" << v2 << " | " << "shkola-" << v5 << " | " << "klass-" << v2_class2 << endl;
}
 
void main()
{
    setlocale(LC_ALL, "Russian");
    class2*f[2];
    system("chcp 1251");
    system("cls");
    f[0] = new class2;
    f[1] = new class2;
    for (int i = 0; i<2; i++)
        f[i]->out();
    delete f[0];
    delete f[1];
    cin.get(); cin.get();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2015, 20:02
Ответы с готовыми решениями:

Некорректное считывание строки
Доброго времени суток. Подскажите, пожалуйста, с чем связана данная проблема: есть текст в файле,...

Некорректное считывание из файла
Есть необходимость записывать и считывать в файл и обратно С первым все просто, со вторым казалось...

некорректное считывание из файла
ifstream ifst(FNAME_USERLIST); while(!ifst.eof()) { string templog; string...

Некорректное обрезание строки
Снова всем добрый день.:) Появилась новая проблемка... Наверное, как всегда, вечер рабочего дня...

4
67 / 67 / 72
Регистрация: 10.04.2015
Сообщений: 281
22.06.2015, 20:19 2
cin.getline(v3,sizeof(v3));

Как-то так, может сработает.
0
lss
939 / 867 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
22.06.2015, 20:44 3
Цитата Сообщение от Danichee Посмотреть сообщение
v = new char[strlen(v3)];
strcpy(v, v3);
Памяти мало выделяешь, нужно и под '\0':
C++
1
2
v = new char[strlen(v3) + 1];
strcpy(v, v3);
0
0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 27
22.06.2015, 21:24  [ТС] 4
Попробовал так, теперь считывает, но в записи выводит только последнее слово


cin.getline(v3,sizeof(v3));

Как-то так, может сработает.
Цитата Сообщение от Danichee Посмотреть сообщение
Попробовал так, теперь считывает, но в записи выводит только последнее слово
cin.getline(v3,sizeof(v3));
Как-то так, может сработает.
Точнее выводит все, кроме первого слова... что не так?
0
lss
939 / 867 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
22.06.2015, 22:24 5
Цитата Сообщение от Danichee Посмотреть сообщение
Попробовал так,
Как? Код, где читаешь показывай.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2015, 22:24
Помогаю со студенческими работами здесь

Некорректное форматированием строки после %d
Всем доброго времени суток. При форматировании строки любым способом (sprintf либо самописное...

считывание строки
ввело в ступор... как считать строку без применения стринга..ну т.е.: char a; cin &gt;&gt; a; как...

Считывание строки
В общем появилась у меня недавно необходимость чужой код из консоли перевести в форму. Все функции...

считывание строки. С++
Строка считывается посимвольно буквами. а надо, чтобы словами.. как это сделать? FILE *fp2 =...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru