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

Коррекция - C++

Восстановить пароль Регистрация
 
 
SnapeEye
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 178
22.07.2013, 10:04     Коррекция #1
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 <cstring>
int main()
{
    using namespace std;
    char charr[20];
    string str;
 
    cout << "Lenght of string in charr before input: " << strlen(charr) << endl;
    cout << "Lenght of string in str before input: " << str.size() << endl;
    cout << "Enter a line of text:\n";
    cin.getline(charr, 20);
    cout << "You entered: " << charr << endl;
    cout << "Enter another line of text:\n";
    getline(cin, str);
    cout << "You entered: " << str << endl;
    cout << "Lenght of string in charr after input: " << strlen(charr) << endl;
    cout << "Lenght of string in str after input: " << str.size() << endl;
    system("pause");
    return 0;
}
Должно выйти:
Lenght of string in charr before input: 27
Lenght of string in str before input: 0
Enter a line of text:
peanut butter
You entered: peanut butter
Enter another line of text:
blueberry jam
You entered: bueberry jam
Lenght of string in charr after input: 13
Lenght of string in str after input: 13

Выходит:
Lenght of string in charr before input: 31
Lenght of string in str before input: 0
Но в тоге выходит по 13 в последних строках.
Почему сначала не то число?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2013, 10:04     Коррекция
Посмотрите здесь:

Assembler 2-10 коррекция
C++ Коррекция перевода float > char[]
3-х 2-х битовая коррекция
Гамма коррекция DirectX
Pascal ABC коррекция программы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
22.07.2013, 10:09     Коррекция #2
Цитата Сообщение от SnapeEye Посмотреть сообщение
Почему сначала не то число?
Переменные не инициализированы. Почему должно выводить "то число" ?
SnapeEye
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 178
22.07.2013, 11:04  [ТС]     Коррекция #3
Цитата Сообщение от lazybiz Посмотреть сообщение
Переменные не инициализированы. Почему должно выводить "то число" ?
это пример из книги, ввел всё правильно, перепроверил, но выходит другое, не было такого ранее
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
22.07.2013, 11:05     Коррекция #4
Если этот пример в точности как из книги - тогда выкинь эту книгу, она тебя хорошему не научит.
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
22.07.2013, 11:07     Коррекция #5
Цитата Сообщение от SnapeEye Посмотреть сообщение
char charr[20];
Цитата Сообщение от SnapeEye Посмотреть сообщение
Должно выйти:
Lenght of string in charr before input: 27
такого не может быть
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
22.07.2013, 11:08     Коррекция #6
Цитата Сообщение от SnapeEye Посмотреть сообщение
это пример из книги
Может там написано что это пример того как делать не надо!?
SnapeEye
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 178
22.07.2013, 13:42  [ТС]     Коррекция #7
Цитата Сообщение от BigLow Посмотреть сообщение
такого не может быть
честно, не я придумал
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
22.07.2013, 13:44     Коррекция #8
Цитата Сообщение от SnapeEye Посмотреть сообщение
это пример из книги
Из какой книги? Если есть электронный вариант кинь ссылку.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
22.07.2013, 14:12     Коррекция #9
Тут я согласен с lazybiz: если этот код точь-в-точь переписан из книги - выкинь книгу в Корзину, она тебя хорошему не научит. И огласи, плз, автора и название, чтобы другие не повелись.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2013, 14:41     Коррекция #10
Цитата Сообщение от BigLow Посмотреть сообщение
такого не может быть
Может.
Цитата Сообщение от SnapeEye Посмотреть сообщение
Почему сначала не то число?
Потому что массив неинициализирован. srtlen() будет искать в массиве терминальный ноль, а так как его там нет, то выйдет за границу массива и где-то в памяти найдет '\0'. Где найдет, зависит от компилятора и от случая. У меня в студии выводит 31, в mingv - 1.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
22.07.2013, 14:50     Коррекция #11
Это пример из книжки Стивена Праты. SnapeEye, прочитай внимательно пояснение к коду и все встанет на свои места.

Кликните здесь для просмотра всего текста
"Где именно встретится нулевой символ в неинициализированном массиве, определяется случаем, поэтому весьма вероятно, что при запуске этой программы вы получите другое значение".
SnapeEye
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 178
26.07.2013, 11:06  [ТС]     Коррекция #12
Цитата Сообщение от CheshireCat Посмотреть сообщение
Тут я согласен с lazybiz: если этот код точь-в-точь переписан из книги - выкинь книгу в Корзину, она тебя хорошему не научит. И огласи, плз, автора и название, чтобы другие не повелись.
Стивен Прата: Язык программирования C++ 6-е издание
CheshireCat
26.07.2013, 11:46
  #13

Не по теме:

Спасибо. Не читал и читать не буду.

castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
26.07.2013, 11:52     Коррекция #14
SnapeEye, почитай лучше Страуструпа.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2013, 15:32     Коррекция #15
Цитата Сообщение от CheshireCat Посмотреть сообщение
Тут я согласен с lazybiz: если этот код точь-в-точь переписан из книги - выкинь книгу в Корзину, она тебя хорошему не научит. И огласи, плз, автора и название, чтобы другие не повелись.
О чём, вообще, разговор? В книге приведён пример, как не нужно делать, и объяснено почему. Что, такие примеры недопустимы в книгах? Если ТС не понял суть примера, то это его проблемы, книга тут не при чём.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
26.07.2013, 16:14     Коррекция #16
Цитата Сообщение от alsav22 Посмотреть сообщение
О чём, вообще, разговор?
А разговор как раз о том, что ТС предоставил этот код как рабочий. В связи с чем был сделан вывод что он учится по плохой литературе. К тому же саму книгу он вначале не обозначил.

Добавлено через 57 секунд
Цитата Сообщение от alsav22 Посмотреть сообщение
Если ТС не понял суть примера, то это его проблемы, книга тут не при чём.
С этим не могу не согласиться.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11838 / 6817 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
26.07.2013, 16:16     Коррекция #17
Ну как бы вот еще:
Цитата Сообщение от SnapeEye Посмотреть сообщение
cout << "Lenght of string in charr before input: " << strlen(charr) << endl;
castaway
26.07.2013, 16:18
  #18

Не по теме:

Ну.., как бы слово "before" не говорит о том что это пример неправильного кода.

alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2013, 16:29     Коррекция #19
Цитата Сообщение от SnapeEye Посмотреть сообщение
Стивен Прата: Язык программирования C++ 6-е издание
2011 года? Если можно страницу, что-то там я не нахожу этого кода.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2013, 16:47     Коррекция
Еще ссылки по теме:

Массивы, коррекция кода C (СИ)
Перспективная коррекция в 2D C++

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

Или воспользуйтесь поиском по форуму:
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
26.07.2013, 16:47     Коррекция #20
Цитата Сообщение от alsav22 Посмотреть сообщение
Если можно страницу
151 - 152. 6 издание 2012 год.
Yandex
Объявления
26.07.2013, 16:47     Коррекция
Ответ Создать тему
Опции темы

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