Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: C++ Любопытная особенность cout  (Прочитано 1376 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Jack Sparrow

  • Автор темы
  • Активист
  • *
  • Сообщений: 629
    • Просмотр профиля
C++ Любопытная особенность cout
« : 14 Января 2013, 14:43:10 »
Осваиваю работу со строками. Программа меняет hello на HELLO. Пытаюсь разобраться, почему 1, 3 и 4 код работает, а 2 и 5 выдает числовые значения вместо букв.

Код: (c) [Выделить]
#include <iostream>
#include <string>
#include <cctype>
using namespace std;


int main()
{
    string s = "hello";
    int i;
    char c;
   
    for (i = 0; i < s.length(); i++)
    {
        //printf("%c", toupper(s[i]));  // 1) работает
       
        cout << toupper(s[i]);          // 2) выводит числа вместо букв
       
        //putchar(toupper(s[i]));       // 3) работает
       
        //c = toupper(s[i]);            // 4) работает
        //cout << c;
       
        //cout << toupper((char) s[i]); // 5) принудительное преобразование в char тоже не помогает
    }
   
   
    return 0;
}


« Последнее редактирование: 14 Января 2013, 14:50:18 от yorik1984 »
Linux is only free if your time has no value (c) Jamie Zawinski

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5422
  • Все по палатам!
    • Просмотр профиля
Re: C++ Любопытная особенность cout
« Ответ #1 : 14 Января 2013, 15:38:17 »
cout << (char) toupper(s[i]);
« Последнее редактирование: 16 Января 2013, 13:23:54 от SergeyIT »
Извините, я все еще учусь

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: C++ Любопытная особенность cout
« Ответ #2 : 15 Января 2013, 07:55:40 »
ну собственно документация рулит
http://www.cplusplus.com/reference/cctype/toupper/
зацени тип возвращаемого значения

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: C++ Любопытная особенность cout
« Ответ #3 : 15 Января 2013, 09:51:01 »
 toupper(s)) уберите и все будет ОК

Пользователь решил продолжить мысль 15 Января 2013, 09:53:55:
Давно проги на С++ не писал, но насколько помню
toupper переводит строку в верхний регистр всю.
« Последнее редактирование: 15 Января 2013, 09:53:55 от Señor_Gaga »

Оффлайн Jack Sparrow

  • Автор темы
  • Активист
  • *
  • Сообщений: 629
    • Просмотр профиля
Re: C++ Любопытная особенность cout
« Ответ #4 : 15 Января 2013, 17:06:12 »
зацени тип возвращаемого значения
Вот где собака-то зарыта! Раз возвращает int, то в 1) %c преобразовывает в букву, в 3) наверное, putchar, в 4) переменная c объявлена как char, поэтому тоже срабатывает. А в 2) ничего нет, вот и выводит int.

Давно проги на С++ не писал, но насколько помню
toupper переводит строку в верхний регистр всю.

Из документации
int toupper ( int c );
Значит не всю, а только по одному символу.
Linux is only free if your time has no value (c) Jamie Zawinski

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: C++ Любопытная особенность cout
« Ответ #5 : 16 Января 2013, 04:48:16 »
язык Выскажу свое мнение - сиппюсплюс = отвратный язык пр.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: C++ Любопытная особенность cout
« Ответ #6 : 16 Января 2013, 07:22:55 »
Señor_Gaga,
учитывая что ты его не знаешь и лажанулся на ровном месте твоё мнение нам как рыбе зонтик

 

Страница сгенерирована за 0.028 секунд. Запросов: 25.