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

Учусь умножать - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
worp1
2 / 1 / 0
Регистрация: 01.12.2011
Сообщений: 45
03.08.2013, 17:07     Учусь умножать #1
Здравствуйте, дорогие обитатели CyberForum
Есть небольшая просьба, прошу подтолкнуть меня к правильному решению задачи.
Изначально мне нужно было написать программу, которая считывает с клавиатуры имя и возраст, и потом их выводит на экран, но после выполнения этого задания возникло новое, тяжело дающееся мне задание: Нужно вводить возраст в годах и выводить его в месяцах. Нужного материала для решения этой задачи я не смог найти, поэтому обращаюсь к знающим: Помогите, пожалуйста
Еще мне интересно, почему возраст выводится не в скобках, как я пытался сделать. Если кто поймет в ходе просмотра кода, укажите на мою ошибку, пожалуйста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
inline void keep_window_open() {char ch; cin>>ch; }
 
int main()
{
    setlocale[LC_ALL, "Russian"];
    cout << "Пожалуйста, введите свое имя и возраст\n";
    string first_name;
    int age;
    cin >> first_name;
    cin >> age;
    int age_obc;
    age_obc==age*12;
    age==age_obc;
    cout << "Hello, " << first_name << " (age " << age << ")\n";
        keep_window_open();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Discoverer
03.08.2013, 17:41     Учусь умножать
  #21

Не по теме:

Вот меня умиляют эти трогательные советы насчет "попроще". Автор спрашивал кого-нибудь об этом?
И вообще, эта книга как раз и предназначена для тех, кто никогда не занимался программированием.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Даниил
03.08.2013, 17:41
  #22

Не по теме:

На будущее, чтоб писать чей-то ник не нужно вручную всё делать, просто нажимаете по нику и всё

VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
03.08.2013, 17:45     Учусь умножать #23
Цитата Сообщение от worp1 Посмотреть сообщение
VLK, "Тяжело в учении, легко в бою"!
Но если начнется действительно что-то очень тяжелое для меня, последую Вашему совету, спасибо
Учение и бой, это физические упражнения, тут это закономерно, программирование это уже работа головой, и тут главное понять, и чем проще, тем лучше, потому что если ты что то не так понимаешь, то это потом может печально закончиться, а если у тебя возникают такие вопросы:

Цитата Сообщение от worp1 Посмотреть сообщение
А system("pause"); это разве не тоже самое, что и keep_window_open();?
то ты явно много понимаешь не так, причем на столько элементарные вещи.
worp1
2 / 1 / 0
Регистрация: 01.12.2011
Сообщений: 45
03.08.2013, 18:06  [ТС]     Учусь умножать #24
Спасибо, Даниил, теперь буду кликать по нику

VLK, не нужно на меня давить, пожалуйста.
Я хочу попробовать свои силы именно с этой книжкой, ибо мне она понравилась. Приятный автор
Обещаю, если я почувствую, что эта книга, которую Страуструп написал именно для новичков, покажется мне сложной, то я обращусь к Вам за более легкой литературой по программированию, либо полезу в поисковик, если у Вас не будет на меня времени/желания
А на счет понимания, часто само понимание приходит во время выполнения/попытки выполнить чего-либо.
Никому зла не желаю, поэтому без обид, пожалуйста.
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
03.08.2013, 18:37     Учусь умножать #25
Полчаса думал над строкой
C++
1
char name[100];
!!! И вы знаете, до меня дошло- это несколько переменных, точнее сто, и их всех зовут name, и каждая типа char.
Так ли я понимаю, что он образуют некую последовательность? Ведь это наверно так можно и нужно понимать.
Тогда как происходит ввод std::cin >> name; Как машина определяет, какая буква куда попадет, и главное, как выходит, что при выводе буквы выводятся не кучей, а в той же последовательности?

Добавлено через 11 минут
Скомпилировал. При попытке выполнить вместо вменяемых слов, символы, весьма напаминающие кирилицу 16 века...
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
03.08.2013, 18:42     Учусь умножать #26
char - это значит что тип данных символы
name[100] - это значит массив из 100 элементов

char name[100] - массив символов из 100 элементов, если опустить что цифры, плюсы и минусы тоже являются символами, и мы будем вводить только буквы, то это массив из 100 букв


[100] - начинается этот массив с 0 и заканчивается 99, т.е. name[0] - name[99]

std::cin >> name;

каждая введенная буква будет записываться в массив, т.е. если ты введешь - Batonov, то

name[0] - B
name[1] - a
name[2] - t
name[3] - o
name[4] - n
name[5] - o
name[6] - v

Все остальные элементы ([7] - [99]) заполнятся пустотой (или пробелами, я уже точно не помню)

если при вводе ты введешь больше 100 элементов, то 101, 102 и т.д. символы будут проигнорированы

Что бы вывести определенной элемент массива, надо написать
std::cout << name[5];
что бы вывести весь массив, соответственно:
std::cout << name;

Добавлено через 2 минуты
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Скомпилировал. При попытке выполнить вместо вменяемых слов, символы, весьма напаминающие кирилицу 16 века...
Вводить надо латинские буквы, до кириллицы еще рано.
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
03.08.2013, 18:45     Учусь умножать #27
СПАСИБО!!!!!!!!!!!!!!!!!!!!!
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
03.08.2013, 18:54     Учусь умножать #28
Кстати программа работает довольно интересно если попробовать ввести по мимо имени еще и фамилию, например Batonov Anton

Добавлено через 7 минут
Да, наверное даже сейчас создам отдельную тему, почему так, самому стало интересно
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
03.08.2013, 19:01     Учусь умножать #29
Цитата Сообщение от VLK Посмотреть сообщение
Все остальные элементы ([7] - [99]) заполнятся пустотой (или пробелами, я уже точно не помню)
В элемент [7] запишется нуль-символ, в последующих останется мусор.

Цитата Сообщение от VLK Посмотреть сообщение
если при вводе ты введешь больше 100 элементов, то 101, 102 и т.д. символы будут проигнорированы
Будет выход за пределы массива.
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
03.08.2013, 19:01     Учусь умножать #30
Хотя нет, у меня косяк в коде
std::cout << "Имя: " << name << " возраст: " << age << " месяцев \n";
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
03.08.2013, 19:03     Учусь умножать #31
Цитата Сообщение от VLK Посмотреть сообщение
Кстати программа работает довольно интересно если попробовать ввести по мимо имени еще и фамилию, например Batonov Anton
>> читает до пробельного символа. Используйте istream::getline
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
03.08.2013, 19:11     Учусь умножать #32
Цитата Сообщение от Schizorb Посмотреть сообщение
Будет выход за пределы массива.
точно? (это вопрос), а в каком случае будет игнорироваться?
на сколько я помню если писать name[101] вот тогда действительно будет выходить, и если выводить, std::cout << name[101] тоже будет выводить значения из других ячеек памяти, за пределами программы.

Добавлено через 1 минуту
Хотя да, дейвительно, будет выходить за придел массива

Добавлено через 3 минуты
И насчет мусора верно.

Добавлено через 1 минуту
Цитата Сообщение от Schizorb Посмотреть сообщение
>> читает до пробельного символа. Используйте istream::getline
не, у меня был косяк в программе за место возраста имя выводило, а за место имени возраст, и я минут 5 не мог найти ошибку, жесть.. свои ошибки тяжело увидеть. Ну в смысле в этом заключалась интересность работы программы.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
03.08.2013, 19:11     Учусь умножать #33
Цитата Сообщение от VLK Посмотреть сообщение
точно? (это вопрос), а в каком случае будет игнорироваться?
Можно явно указать длину вводимой строки, с помощью setw:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <iomanip>
 
int main()
{
    const int size = 5;
    char name[size];
    
    std::cin >> std::setw(size) >> name;
    std::cout << name;
}
Так получится ввести строку без пробелов, длиной size - 1 (последний элемент - под нуль-символ)
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
03.08.2013, 19:24     Учусь умножать #34
А прикиньте, что в исходном варианте при вводе пробела возникает вобще тупо глюк!! Вот
Миниатюры
Учусь умножать  
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
03.08.2013, 19:25     Учусь умножать #35
хотя не знаю что у тебя за ошибки, ладно, мне пора..
Schizorb
03.08.2013, 19:27
  #36

Не по теме:

Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
А прикиньте
Строка ("вышекшо") из потока считалась нормально, а потом ожидается int, а вы подсовываете хрень. Вот и весь глюк.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2013, 20:09     Учусь умножать
Еще ссылки по теме:

Учусь программированию на языке с++ самостоятельно C++
Перегрузка операторов. Учусь. Ошибка C++
C++ Создать независимую функцию, которая будет умножать две матрицы

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

Или воспользуйтесь поиском по форуму:
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
03.08.2013, 20:09     Учусь умножать #37
Как имено это происходит. Прога дальше не ждет ввода возраста, а исполняет все дальше без паузы, выдавая то самое. Как-то так.

Добавлено через 32 секунды
Ну, да.

Добавлено через 38 минут
Простите, а как это все работает? И что это std::setw(size)?
Yandex
Объявления
03.08.2013, 20:09     Учусь умножать
Ответ Создать тему
Опции темы

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