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

Классы из Дейтела - C++

Восстановить пароль Регистрация
 
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
30.07.2013, 13:25     Классы из Дейтела #1
Сейчас читаю книгу Дейтела (Как программировать на С++ (5-е издание, 2008) ), читаю главу про классы, там предоставлен такой код:

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 "stdafx.h"
#include <clocale>
#include <iostream>
#include <conio.h>
#include <string>
 
using namespace std;
 
class GradeBook
{
public:
    void displayname ( string CourceName ) {
    cout << "Добро пожаловать в GradeBook, " << CourceName << "!" << endl;
}
};
 
int main()
{
    setlocale (0,"");
    string CourceOfName;
    GradeBook myGradeBook;
    getline( cin, CourceOfName );
    cout << endl;
    myGradeBook.displayname( CourceOfName );
    getch();
    return 0;
}
Но когда я ввожу CourceOfName то выводится какая-то несуразица
Например:
Классы из Дейтела

Подскажите, в чём проблема?

Добавлено через 1 минуту
Возможно это из-за того что setlocale не действует на класс?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
30.07.2013, 14:25     Классы из Дейтела #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
#include <clocale>
#include <iostream>
#include <conio.h>
#include <string>
 
using namespace std;
 
class GradeBook
{
public:
    void displayname ( string CourceName ) {
    cout << "Добро пожаловать в GradeBook, " ;
    setlocale(LC_ALL, ".866");
    cout<< CourceName << "!" << endl;
}
};
 
int main()
{
    setlocale (0,"");
    string CourceOfName;
    GradeBook myGradeBook;
    getline( cin, CourceOfName );
    cout << endl;
    myGradeBook.displayname( CourceOfName );
    getch();
    return 0;
}
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
30.07.2013, 14:27  [ТС]     Классы из Дейтела #3
Спасибо большое, работает
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
30.07.2013, 14:32     Классы из Дейтела #4
Цитата Сообщение от Даниил1991 Посмотреть сообщение
Спасибо большое, работает
всегда пожалуйста
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.07.2013, 14:44     Классы из Дейтела #5
А можно и вот так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using namespace std;
class GradeBook
{
public:
    void displayname ( string CourceName )
    {
        cout << "Добро пожаловать в GradeBook, " << CourceName << "!" << endl;
    }
};
int main()
{
    system("chcp 1251>0");
    string CourceOfName;
    GradeBook myGradeBook;
    getline( cin, CourceOfName );
    myGradeBook.displayname( CourceOfName );
    system("pause");
    return 0;
}
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
30.07.2013, 14:47  [ТС]     Классы из Дейтела #6
А в чём прикол
Цитата Сообщение от Ilot Посмотреть сообщение
system("chcp 1251>0");
?

Добавлено через 1 минуту
Не работает такое
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.07.2013, 14:51     Классы из Дейтела #7
Обращение к командной строке. В данном случае обращение к кодовой странице 1251 без вывода сообщения.
Если не работает попробуйте 866.
C++
1
    system("chcp 866>0");
По командам командной строки можете смотреть справку в винде. Там имеется очень много команд.(Это пожалуй единственная полезная информация в этой справке).
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
30.07.2013, 15:03  [ТС]     Классы из Дейтела #8
Тоже не работает, точнее работает, но на 10%
Т.е. пишется "непонятные символы GradeBook, Вот!

Ну меня в принципе устраивает вариант предложеный Valentina
Ну вам тоже спасибо за то что стараетесь помочь
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.07.2013, 15:09     Классы из Дейтела #9
Даниил1991, в консоли установлен шрифт Lucida?
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
30.07.2013, 15:19  [ТС]     Классы из Дейтела #10
Нет
Да к чему эти заморочки со шрифтами если можно просто писать setlocale (0,""); (для этого ещё добавлять библиотеку clocale) и не заморачиваться со шрифтами
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11844 / 6823 / 771
Регистрация: 27.09.2012
Сообщений: 16,915
Записей в блоге: 2
Завершенные тесты: 1
30.07.2013, 16:12     Классы из Дейтела #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
#include <clocale>
#include <iostream>
#include <conio.h>
#include <string>
#include <Windows.h>
using namespace std;
 
class GradeBook
{
public:
    void displayname ( string CourceName ) {
    cout << "Добро пожаловать в GradeBook, " << CourceName << "!" << endl;
}
};
 
int main()
{
    SetConsoleCP ( 1251 ) ;
     SetConsoleOutputCP ( 1251 ) ;
    string CourceOfName;
    GradeBook myGradeBook;
    getline( cin, CourceOfName );
    cout << endl;
    myGradeBook.displayname( CourceOfName );
    getch();
    return 0;
}
Шрифт Licida Console

Цитата Сообщение от Ilot Посмотреть сообщение
В данном случае обращение к кодовой странице 1251 без вывода сообщения.
Прям вот без вывода?
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.07.2013, 16:41     Классы из Дейтела #12
Цитата Сообщение от Croessmah Посмотреть сообщение
Прям вот без вывода?
Точно так господин.
С выводом сообщения о кодировке:
C++
1
    system("chcp 1251");
Без такового:
C++
1
    system("chcp 1251>0");
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11844 / 6823 / 771
Регистрация: 27.09.2012
Сообщений: 16,915
Записей в блоге: 2
Завершенные тесты: 1
30.07.2013, 16:42     Классы из Дейтела #13
Цитата Сообщение от Ilot Посмотреть сообщение
Точно так господин.
А вот теперь заходите в текущую папку и узрите файл с именем '0' и со всем выводом!
> - это перенаправление вывода, а не его отключение
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
30.07.2013, 16:47     Классы из Дейтела #14
Croessmah, надеюсь сильно бить не будете? Я всего лишь только учусь, многого могу не знать...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2013, 16:55     Классы из Дейтела
Еще ссылки по теме:

C++ Задача из книги Дейтела "Шахматная доска"
C++ Задача из книги Дейтела "Квадрат"
Задача из книги Дейтела "Ромб" C++

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

Или воспользуйтесь поиском по форуму:
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.07.2013, 16:55     Классы из Дейтела #15
C++
1
system("chcp 1251>nul");
Yandex
Объявления
30.07.2013, 16:55     Классы из Дейтела
Ответ Создать тему
Опции темы

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