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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

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

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

Оффлайн Jack Sparrow

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

Код: C
  1. #include <iostream>
  2. #include <string>
  3. #include <cctype>
  4. using namespace std;
  5.  
  6.  
  7. int main()
  8. {
  9.     string s = "hello";
  10.     int i;
  11.     char c;
  12.    
  13.     for (i = 0; i < s.length(); i++)
  14.     {
  15.         //printf("%c", toupper(s[i]));  // 1) работает
  16.        
  17.         cout << toupper(s[i]);          // 2) выводит числа вместо букв
  18.        
  19.         //putchar(toupper(s[i]));       // 3) работает
  20.        
  21.         //c = toupper(s[i]);            // 4) работает
  22.         //cout << c;
  23.        
  24.         //cout << toupper((char) s[i]); // 5) принудительное преобразование в char тоже не помогает
  25.     }
  26.    
  27.    
  28.     return 0;
  29. }
  30.  
  31.  
  32.  
« Последнее редактирование: 14 Январь 2013, 14:50:18 от yorik1984 »
Linux is only free if your time has no value (c) Jamie Zawinski

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5121
  • Все по палатам!
    • Просмотр профиля
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.174 секунд. Запросов: 25.