Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
IVSasha
6 / 6 / 3
Регистрация: 29.07.2015
Сообщений: 61
#1

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

31.07.2015, 18:28. Просмотров 498. Ответов 21
Метки нет (Все метки)

Почему не вводятся имя, фамилия и возраст?
Первые 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2015, 18:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Где ошибка? (C++):

Вывести на экран количество слов где первая и последняя буквы одинаковы (не понимаю где ошибка)
задан текст нужно вывести на экран количество слов где первая и последняя буквы...

Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил)
написать универсальный тип, который представляет точку на плоскости в...

Укажите где ошибка (ошибка во время выполнения программы)
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при...

Ошибка при компиляции. Где ошибка? (Работа с классом)
Уважаемые форумчане! При компиляции проекта возникает ошибка &quot; undefined...

В чём ошибка.В коде там где коментарий там ошибка поучается.
#include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; class...

Где ошибка?
#include &lt;iostream&gt; using namespace std; int main() { double fahr, cels;...

21
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
31.07.2015, 18:40 #2
Лучший ответ Сообщение было отмечено IVSasha как решение

Решение

Цитата Сообщение от IVSasha Посмотреть сообщение
typedef unsigned char BYTE;
Возраст в символах? оригинально)
замени char на int
1
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
31.07.2015, 18:43 #3
Лучший ответ Сообщение было отмечено IVSasha как решение

Решение

поменяй BYTE на int
у тебя BYTE это unsigned char и ввод ждет 1 символа , когда ты вводишь 19 он берет 1 и 9 отправляет дальше
1
IVSasha
6 / 6 / 3
Регистрация: 29.07.2015
Сообщений: 61
31.07.2015, 18:46  [ТС] #4
Но ведь в char можно записать цифры.
C++
1
char age = 17;
А ввести с клавиатуры их нельзя?
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
31.07.2015, 18:48 #5
Лучший ответ Сообщение было отмечено IVSasha как решение

Решение

Цитата Сообщение от IVSasha Посмотреть сообщение
А ввести с клавиатуры их нельзя?
в коде ты явно задаешь цифру 17 как int
а cin в случае с char будет думать что 17 это строка "17" ( '1' , '7' )

можно через временную переменную int
вводишь через cin в переменную int потом копируешь в переменную char
1
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
31.07.2015, 18:56 #6
Лучший ответ Сообщение было отмечено IVSasha как решение

Решение

Цитата Сообщение от IVSasha Посмотреть сообщение
Но ведь в char можно записать цифры
Не пиши в char не чего кроме букв, для таких случаев есть int;
В char храниться буквенное представление символа. посмотри таблицу символов ASCII в вики.
C++
1
2
char a=49;
char a='1'//извлечь код символа 1
это одно и тоже
1
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
31.07.2015, 18:58 #7
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
Не пиши в char не чего кроме букв
иногда нужно экономить память и использовать для числа 1 байт ( но не в этот раз )
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
31.07.2015, 18:59 #8
Что это:
Цитата Сообщение от IVSasha Посмотреть сообщение
User(std::string firstName, std::string lastName, BYTE age) : firstName(firstName),lastName(lastName), age(age)
? Что то по декларации не видно, чтоб у класса User были предки.
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
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 были предки
такая инициализация допустима и для полей. Что не так?
0
IVSasha
6 / 6 / 3
Регистрация: 29.07.2015
Сообщений: 61
31.07.2015, 19:07  [ТС] #10
Предков нет. Это так переменные firstName, lastName и age инициализируются
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
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, вы о том что нужно так?
Как?
1
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
31.07.2015, 19:16 #12
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
a='17';
Засунуть в символьную переменную 2 символа - очень умно.
Цитата Сообщение от taras atavin Посмотреть сообщение
Что то по декларации не видно, чтоб у класса User были предки.
А это к чему Вы написали?
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
31.07.2015, 19:17 #13
Цитата Сообщение от IVSasha Посмотреть сообщение
Предков нет. Это так переменные firstName, lastName и age инициализируются
Вызовом конструкторов отсутствующих предков?

Добавлено через 50 секунд
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Засунуть в символьную переменную 2 символа - очень умно.
Я это предложил ТСу в целях наглядной демонстрации дури.
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
31.07.2015, 19:18 #14
Цитата Сообщение от taras atavin Посмотреть сообщение
Вызовом конструкторов отсутствующих предков?
это корректная инициализация переменных! Что не так?
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
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;
.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
31.07.2015, 19:21 #16
Этот код пишет: Где ошибка?.
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
31.07.2015, 19:21 #17
Цитата Сообщение от taras atavin Посмотреть сообщение
Я это предложил ТСу в целях наглядной демонстрации дури.
пример, который не скомпилируется даже? А зачем тогда пример в принципе писать?
Цитата Сообщение от taras atavin Посмотреть сообщение
Вызовом конструкторов отсутствующих предков
Это обычный список инициализации полей. О каких предках может идти речь?
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
31.07.2015, 19:22 #18
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
это корректная инициализация переменных! Что не так?
Таким синтаксисом вызываются конструкторы предков, предков нет.

Добавлено через 45 секунд
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
пример, который не скомпилируется даже? А зачем тогда пример в принципе писать?
Компилируется и даже исполняется. Только в переменную a попадает одна цифра. Последняя. А писать для демонстрации.
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
31.07.2015, 19:25 #19
Цитата Сообщение от taras atavin Посмотреть сообщение
Таким синтаксисом вызываются конструкторы предков
Это не значит что так нельзя инициализировать переменные! В некоторых ситуациях такая инициализация переменных даже необходима! Вас не смутило что код рабочий? линковщик и компилятор заметили бы отсутствие предков
1
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
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.
тоже вполне рабочие. Но при этом понятны не всем. Как проверять? А если код не был понятен и автору, то ошибка могла быть этим и вызвана. Код рабочий? Эйси, значит компилятор его проглотил. Но ведёт он себя не как задумано, а это указывает на алгоритмическую ошибку, которая могла быть вызвана недопониманием. Пример тому в русском языке: "Как я провёл этим летом".
0
31.07.2015, 19:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2015, 19:41
Привет! Вот еще темы с решениями:

Где ошибка ?
Даны числа x и n . Вычислить S=sin(x)+sin(sin(x))+.....+sin(sin....sin(x)). ...

Где ошибка ?
Задача такая Вычислить сумму n слагаемых...

Где ошибка??
нужна такая прога которая при введении чисел a и b а также введение операции с...

Где ошибка?
#include &lt;iostream&gt; using namespace std; int main() { int Fx=4, Fy=5, x,...


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

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

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