Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2015, 19:21   #1
kakawkaization
Новичок
Джуниор
 
Регистрация: 14.10.2015
Сообщений: 4
По умолчанию Ошибка при переводе строчных букв в прописные и обратно

Здравствуйте, начал изучать C++ по Герберту Шилдту, второе издание для начинающих.
Застопорился на практическом задании, в нем надо при вводе букв переводить строчные в прописные и обратно,
а все остальные символы выводить без изменения, а так же обеспечить выход из программы посредством ввода
символа точка.
Написал программу:
Код:
#include <iostream
using namespace std;
 
int main() {
  char b,small,big;
 
  while(b!='.') {
    cout << "Введите букву или символ: ";
    cin >> b;
 
    small=b+32;
    big=b-32;
 
    if(small) cout << big << "\n";
    else if(big) cout << small << "\n";
    else cout << b << "\n";
  }
 
  return 0;
}
При выполнении выполняется только if- условие, else-if и else ветки не выполняются. Менял местами созданные переменные в условии if, без разницы, выполняется только if- условие и все.
Что делать, подскажите пожалуйста.
kakawkaization вне форума Ответить с цитированием
Старый 14.10.2015, 19:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
small=b+32;
big=b-32;
Неудачное начало. Я бы не рекомендовал прислушиваться к такому устаревшему совету, если он шел из книги. Уж тогда напиши так:
Код:
if(b>='a' && b<='z') big=b-'a'+'A'; else
if(b>='A' && b<='Z') small=b-'A'+'a';
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2015, 19:34   #3
kakawkaization
Новичок
Джуниор
 
Регистрация: 14.10.2015
Сообщений: 4
По умолчанию

Нет, это я сам додумал хорошо сейчас попробую по другому.
kakawkaization вне форума Ответить с цитированием
Старый 14.10.2015, 19:36   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,358
По умолчанию

Цитата:
Сообщение от kakawkaization Посмотреть сообщение
Что делать, подскажите пожалуйста.
Задуматься... например что по-вашему должно делать small=b+32 и почему надо проверять small через if.
waleri вне форума Ответить с цитированием
Старый 14.10.2015, 19:40   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
это я сам додумал
Тогда рекомендую додуматьсо вот сюда: http://www.cplusplus.com/reference/c...er/?kw=tolower
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2015, 19:48   #6
kakawkaization
Новичок
Джуниор
 
Регистрация: 14.10.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Задуматься... например что по-вашему должно делать small=b+32 и почему надо проверять small через if.
переменной small присваивается значение строчной буквы, в книге по которой я изучаю c++ написано в данном задании, что чтобы получить из строчной буквы прописную нужно вычесть 32. Поэтому если введенное значение будет прописной буквой, то данной переменной как раз и проверяется какая буква была введена.

Почему через if..
На момент прочтения книги до данного задания я пока не нашел другого способа.
kakawkaization вне форума Ответить с цитированием
Старый 14.10.2015, 20:51   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в книге по которой я изучаю c++ написано в данном задании, что чтобы получить из строчной буквы прописную нужно вычесть 32
Так всетки это ты в книге вычитал? Ну тогда тебе стоит закрыть ее и открыть другую, потому что такие финты в современных ОС будут (могут) лажать. В DOS да - такое прокатывало.
Цитата:
Почему через if..
На момент прочтения книги до данного задания я пока не нашел другого способа.
Ну потому что тебе нужна проверка на символ - в каком он регистре введен. Если он введен в большом регистре, то одна из твоих переменных получит неверный результат. А твои IF() вообще нормально не сработают, потому что у тебя проверка только на ноль. А не на <= или >=
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.10.2015, 00:31   #8
kakawkaization
Новичок
Джуниор
 
Регистрация: 14.10.2015
Сообщений: 4
По умолчанию

Все верно по поводу нуля, переписал код, теперь все работает, спасибо.
Код:
#include <iostream>
using namespace std;
 
int main()
{
  char b,small,big;
 
  while(b!='.') {
    cout << "Введите букву: ";
    cin >> b;
 
    small=b+32;
    big=b-32;
    
    if(b>='a' && b<='z') cout << big << "\n";
    else if(b>='A' && b<='Z') cout << small << "\n";
    else cout << b << "\n";
 }
 
  return 0;
}
kakawkaization вне форума Ответить с цитированием
Старый 15.10.2015, 12:19   #9
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Откройте для себя cctype и локали
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан текст (слова из строчных латинских букв). Построить множество, состоящее из букв, входящих в текст не менее двух раз Grenki Паскаль, Turbo Pascal, PascalABC.NET 5 25.03.2014 14:40
Перекодировка строчных букв ac1d_buRn Помощь студентам 10 31.10.2010 19:08
Ошибка при переводе числа Marsel737 Общие вопросы Delphi 4 06.12.2009 12:56
Очень нужна помощь в переводе символов в ASCII и обратно !!!~VivO~!!! Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.05.2008 10:47