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

Где ошибка? - C++

Восстановить пароль Регистрация
 
 
IVSasha
6 / 6 / 2
Регистрация: 29.07.2015
Сообщений: 61
31.07.2015, 18:28     Где ошибка? #1
Почему не вводятся имя, фамилия и возраст?
Первые 3 пользователя вводятся. Четвертый не вводится

Enter first name, last name and age > Viktor Ivanov 17
Enter first name, last name and age > Denis Petrov 18
Enter first name, last name and age > Aleksander Sigaev 19 // нажимаю Enter и ...
Enter first name, last name and age > Viktor Ivanov 1 // ... эта строка сама ввелась !!
7 Denis P
etrov 18 A
leksander Sigaev 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
44
45
46
typedef unsigned char BYTE;
 
class User
{
private:
    std::string firstName; // Фамилия
    std::string lastName; // Имя
    BYTE age;  // Возраст
 
public:
    User()
        : firstName(""), lastName(""), age(0)
    {
    }
 
    User(std::string firstName, std::string lastName, BYTE age)
        : firstName(firstName),lastName(lastName), age(age)
    {
    }
 
    void SetUser()
    {
        std::cout << "Enter first name, last name and age > ";
        std::cin >> firstName >> lastName >> age;
    }
 
    void Print() const
    {
        std::cout << firstName << " " << lastName << " " << age << std::endl;
    }
};
 
int main()
{
 
    User users[4];
 
    for (int i = 0;  i < 4;  i++)
        users[i].SetUser();
 
    for (int i = 0;  i < 4;  i++)
        users[i].Print();
 
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2015, 18:28     Где ошибка?
Посмотрите здесь:

Где ошибка ? C++
Где ошибка? C++
C++ где ошибка
C++ Где ошибка ?
C++ Где ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 199
31.07.2015, 18:40     Где ошибка? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от IVSasha Посмотреть сообщение
typedef unsigned char BYTE;
Возраст в символах? оригинально)
замени char на int
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
31.07.2015, 18:43     Где ошибка? #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
поменяй BYTE на int
у тебя BYTE это unsigned char и ввод ждет 1 символа , когда ты вводишь 19 он берет 1 и 9 отправляет дальше
IVSasha
6 / 6 / 2
Регистрация: 29.07.2015
Сообщений: 61
31.07.2015, 18:46  [ТС]     Где ошибка? #4
Но ведь в char можно записать цифры.
C++
1
char age = 17;
А ввести с клавиатуры их нельзя?
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
31.07.2015, 18:48     Где ошибка? #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от IVSasha Посмотреть сообщение
А ввести с клавиатуры их нельзя?
в коде ты явно задаешь цифру 17 как int
а cin в случае с char будет думать что 17 это строка "17" ( '1' , '7' )

можно через временную переменную int
вводишь через cin в переменную int потом копируешь в переменную char
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 199
31.07.2015, 18:56     Где ошибка? #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от IVSasha Посмотреть сообщение
Но ведь в char можно записать цифры
Не пиши в char не чего кроме букв, для таких случаев есть int;
В char храниться буквенное представление символа. посмотри таблицу символов ASCII в вики.
C++
1
2
char a=49;
char a='1'//извлечь код символа 1
это одно и тоже
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
31.07.2015, 18:58     Где ошибка? #7
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
Не пиши в char не чего кроме букв
иногда нужно экономить память и использовать для числа 1 байт ( но не в этот раз )
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.07.2015, 18:59     Где ошибка? #8
Что это:
Цитата Сообщение от IVSasha Посмотреть сообщение
User(std::string firstName, std::string lastName, BYTE age) : firstName(firstName),lastName(lastName), age(age)
? Что то по декларации не видно, чтоб у класса User были предки.
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 199
31.07.2015, 19:07     Где ошибка? #9
Цитата Сообщение от Raali Посмотреть сообщение
иногда нужно экономить память и использовать для числа 1 байт
когда речь идет о микроконтроллерах то да, в любом случае для ТС сейчас это не актуально.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
private:
    std::string m_firstName; // Фамилия
    std::string m_lastName; // Имя
    BYTE m_age;  // Возраст
 
 
    User(std::string firstName, std::string lastName, BYTE age)
        : m_firstName(firstName),m_lastName(lastName), m_age(age)
    {
    }
taras atavin, вы о том что нужно так?

Добавлено через 2 минуты
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
В char храниться буквенное представление символа
описался числовое)

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
Что то по декларации не видно, чтоб у класса User были предки
такая инициализация допустима и для полей. Что не так?
IVSasha
6 / 6 / 2
Регистрация: 29.07.2015
Сообщений: 61
31.07.2015, 19:07  [ТС]     Где ошибка? #10
Предков нет. Это так переменные firstName, lastName и age инициализируются
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.07.2015, 19:15     Где ошибка? #11
Цитата Сообщение от IVSasha Посмотреть сообщение
Но ведь в char можно записать цифры.
Код C++
Выделить код
1
char age = 17;
А ввести с клавиатуры их нельзя?
Нельзя. 17 - это число, а не цифры. Попробуй
C++
1
2
3
4
a='17';
std::cout(int)<<std::endl;
a=17;
std::cout(int)<<std::endl;
. Узнаешь много нового.

Добавлено через 37 секунд
Цитата Сообщение от Raali Посмотреть сообщение
цифру 17
Нет такой цифры.

Добавлено через 6 минут
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
taras atavin, вы о том что нужно так?
Как?
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1868 / 1664 / 580
Регистрация: 14.05.2014
Сообщений: 4,776
Записей в блоге: 1
Завершенные тесты: 5
31.07.2015, 19:16     Где ошибка? #12
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
a='17';
Засунуть в символьную переменную 2 символа - очень умно.
Цитата Сообщение от taras atavin Посмотреть сообщение
Что то по декларации не видно, чтоб у класса User были предки.
А это к чему Вы написали?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.07.2015, 19:17     Где ошибка? #13
Цитата Сообщение от IVSasha Посмотреть сообщение
Предков нет. Это так переменные firstName, lastName и age инициализируются
Вызовом конструкторов отсутствующих предков?

Добавлено через 50 секунд
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Засунуть в символьную переменную 2 символа - очень умно.
Я это предложил ТСу в целях наглядной демонстрации дури.
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 199
31.07.2015, 19:18     Где ошибка? #14
Цитата Сообщение от taras atavin Посмотреть сообщение
Вызовом конструкторов отсутствующих предков?
это корректная инициализация переменных! Что не так?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.07.2015, 19:19     Где ошибка? #15
Лучше даже так:
C++
1
2
3
4
5
6
7
 uint8_t a;
 a='17';
 std::cout<<(int)a<<std::endl;
 std::cout<<a<<std::endl;
 a=17;
 std::cout<<(int)a<<std::endl;
 std::cout<<a<<std::endl;
.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.07.2015, 19:21     Где ошибка? #16
Этот код пишет: Где ошибка?.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1868 / 1664 / 580
Регистрация: 14.05.2014
Сообщений: 4,776
Записей в блоге: 1
Завершенные тесты: 5
31.07.2015, 19:21     Где ошибка? #17
Цитата Сообщение от taras atavin Посмотреть сообщение
Я это предложил ТСу в целях наглядной демонстрации дури.
пример, который не скомпилируется даже? А зачем тогда пример в принципе писать?
Цитата Сообщение от taras atavin Посмотреть сообщение
Вызовом конструкторов отсутствующих предков
Это обычный список инициализации полей. О каких предках может идти речь?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.07.2015, 19:22     Где ошибка? #18
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
это корректная инициализация переменных! Что не так?
Таким синтаксисом вызываются конструкторы предков, предков нет.

Добавлено через 45 секунд
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
пример, который не скомпилируется даже? А зачем тогда пример в принципе писать?
Компилируется и даже исполняется. Только в переменную a попадает одна цифра. Последняя. А писать для демонстрации.
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 199
31.07.2015, 19:25     Где ошибка? #19
Цитата Сообщение от taras atavin Посмотреть сообщение
Таким синтаксисом вызываются конструкторы предков
Это не значит что так нельзя инициализировать переменные! В некоторых ситуациях такая инициализация переменных даже необходима! Вас не смутило что код рабочий? линковщик и компилятор заметили бы отсутствие предков
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2015, 19:41     Где ошибка?
Еще ссылки по теме:

C++ Где ошибка?
C++ Вывести на экран количество слов где первая и последняя буквы одинаковы (не понимаю где ошибка)
Где ошибка? C++

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.07.2015, 19:41     Где ошибка? #20
Ну коды
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
10 LET x=20
20 LET y=30
30 INPUT f$
40 INPUT  k$
50 GO TO 100
60 FOR x=-100 TO 100 STEP 1
70 FOR y=-100 TO 100 STEP 1
80 LET  z=VAL(f$)
90 PLOT 100+x-y*sin(PI/4), 100+z-y*sin(PI/4)
100 LET  z=VAL(k$)
110 PLOT 100+x-y*sin(PI/4), 100+z-y*sin(PI/4)
120 NEXT y
130 NEXT x
и
Pascal
1
2
3
4
5
6
7
8
9
10
11
var x,y:real;
i:integer;
begin
     x:=-10;
     for i:=1 to 201 do
     begin
          y:=sin(x);
          writeln('sin(',x,')=',y);
          x:=x+0.1;
     end;
end.
тоже вполне рабочие. Но при этом понятны не всем. Как проверять? А если код не был понятен и автору, то ошибка могла быть этим и вызвана. Код рабочий? Эйси, значит компилятор его проглотил. Но ведёт он себя не как задумано, а это указывает на алгоритмическую ошибку, которая могла быть вызвана недопониманием. Пример тому в русском языке: "Как я провёл этим летом".
Yandex
Объявления
31.07.2015, 19:41     Где ошибка?
Ответ Создать тему
Опции темы

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