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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
atmosfz
0 / 0 / 0
Регистрация: 06.06.2014
Сообщений: 4
#1

Подскажите, почему это работает!?) - C++

07.06.2014, 19:33. Просмотров 296. Ответов 6
Метки нет (Все метки)

Мне необходимо изменить все строчные буквы на заглавные, это все получается. Я ввожу символы(причем заметьте массив чар из 0, но программа все равно работает) я что-то разобраться не могу почему, подскажите что я не знаю и не понимаю, если Вас не затруднит. По-моему мнению, она должна читать только первый символ, но программа выводит все символы строки, например: Hello world. Выводит: HELLOWORLD (и почему-то без пробела и точки). Не могу понять как работает сия программа, кою я написал. Хочу разобраться почему. Буду очень признателен, если поможете.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   char word[0];
      for (int i=0; i<18; i++)
          {
          cin>>word[i];
          if(word[i]=='.')
          break;
           }
        char *p=word; 
         while(*p)
            {
            if (islower(*p)) *p = toupper(*p);
            p++;
            }
            cout << "String to upper : " << word << endl;
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2014, 19:33     Подскажите, почему это работает!?)
Посмотрите здесь:

Почему это не работает? - C++
Здравствуйте, почемуто программа работает не так как хотелось бы вроде всё просто, нужно чтобы то что написано в &quot;menu&quot; отобразилось на...

C++ Почему это не работает? - C++
Помогите пожалуйста разобраться(создать студента и группу используя наследование) Код: #include&lt;iostream&gt; #include&lt;string.h&gt; using...

почему это так работает - C++
по заданию надо создать два одинаковых массива с случайными числами от 0 до 99 for (i = 0; i &lt; 1000; i++) { cout &lt;&lt;a&lt;&lt;&quot; &quot;; ...

[c++] fgets не могу понять почему это не работает - C++
Вообщем на диске C:\ лежит 3 файла 1 Файл test.txt 2 Файл 1.dll 3 Файл 2.dll в test.txt записано: 1.dll 2.dll

Подскажите почему не работает - C++
Нужно добавить К элементов в конец динамического массива #include&lt;iostream.h&gt; #include&lt;stdlib.h&gt; #include&lt;conio.h&gt; #include...

Почему функция не работает с чарами? Это из-за недостатка памяти? - C++
#include&quot;stdafx.h&quot; #include&lt;stdio.h&gt; template&lt;class T&gt; T min(T a, T b, T c) { if((a&lt;b)&amp;&amp;(a&lt;c)) return(2*a); else { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.06.2014, 19:41     Подскажите, почему это работает!?) #2
выход за пределы массива не контролируется
atmosfz
0 / 0 / 0
Регистрация: 06.06.2014
Сообщений: 4
07.06.2014, 20:01  [ТС]     Подскажите, почему это работает!?) #3
А что происходит после выхода? Почему символы присваиваются нужные?

Добавлено через 7 минут
Да, и сразу второй вопрос, когда я делаю массив из чар равным допустим 100, на выход я ничего не получаю, почему?
kupnu4
26 / 26 / 9
Регистрация: 03.05.2013
Сообщений: 71
07.06.2014, 20:33     Подскажите, почему это работает!?) #4
работает это, вероятно, потому что указатели и массивы схожи. конкретно имя массива - указатель на первый элемент массива. обращение через квадратные скобочки - ничто иное как *(array_name+index). и потому это работает (это не значит что так делать хорошо). так как массив у вас размером 0 (скорее всего это то же самое что и просто char*), то все остальные занятые массивом ячейки памяти - незарезервированы под него и как следствие могут быть перезаписаны под другие нужды программы. Вывод при массиве символов из 100 элементов не работает так как вывод массивов работает иначе:
C++
1
2
3
for(int i=0;i<18;++i)
    std::cout << array[i];
std::cout << "\n";
вполне сработает.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.06.2014, 20:35     Подскажите, почему это работает!?) #5
Цитата Сообщение от atmosfz Посмотреть сообщение
А что происходит после выхода?
лезете в чужую память

Цитата Сообщение от atmosfz Посмотреть сообщение
Почему символы присваиваются нужные?
невезение, если бы повезло то получили бы по зубам от ОС и больше бы так не делали

Цитата Сообщение от atmosfz Посмотреть сообщение
Да, и сразу второй вопрос, когда я делаю массив из чар равным допустим 100, на выход я ничего не получаю, почему?
давайте полный код
atmosfz
0 / 0 / 0
Регистрация: 06.06.2014
Сообщений: 4
07.06.2014, 20:52  [ТС]     Подскажите, почему это работает!?) #6
Вот полный код, какой я думаю должен быть.
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>
using namespace std;
int main()
{
      char word[100];
      int max,chars[256]={0};
        for (int i=0; i<100; i++)
       {
        cin>>word[i];
        if(word[i]=='.')
        break;
       }
        char *p=word; 
         while(*p)
            {
            if (islower(*p)) *p = toupper(*p);
            p++;
            }
            cout << " Заглавные буквы: " << word << endl; 
      
return 0;
}
Добавлено через 13 минут
Попробовал вывести массив, как мне подсказали в комментарии, не получается, наверное все дело в *p
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2014, 20:55     Подскажите, почему это работает!?)
Еще ссылки по теме:

Подскажите плз, почему не работает - C++
Почему-то не работает цикл &quot;for&quot;. При запуске кода в консольном окне переменная &quot;h&quot; проходит от &quot;0&quot; до &quot;diametr&quot;. Но после окончания цикла...

Подскажите, почему не работает strcpy_s() - C++
Вот код char *pcStr = &quot;Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22&quot; ...

ПОдскажите почему не работает rand? - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; using namespace std; struct item { int data; // данные item *...

Р. Лафоре Подскажите, почему не работает - C++
Никак не пойму, в чем ошибка. #include &lt;iostream&gt; using namespace std; struct sterling { int pound; int shiling; int...

подскажите почему программа работает неправильно - C++
Использование двумерного массива как аргумента функции и возвращаемого значения функции выдает предупреждение:1&gt;------ Build...

С++, оператор return. ПОдскажите, почему не работает? - C++
нужно, чтобы линейная программа завершалась, если выполняется условие. Но даже если условие не выполняется, совершается выход из...


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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.06.2014, 20:55     Подскажите, почему это работает!?) #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
atmosfz, ты не учитываешь что строка должна завершатся нулем и цикл
C++
1
while(*p)
превращается в бесконечный.
считывай строку так:
C++
1
cin >> word;
или
C++
1
cin.getline(word, 100);
Yandex
Объявления
07.06.2014, 20:55     Подскажите, почему это работает!?)
Ответ Создать тему
Опции темы

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