Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неправильный вывод 
:(
    Опции темы
Syltan
Дата 7.9.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Привет всем! Тут написал прогу, которая должна выводить буквы разного регистра.

Код

#include <iostream>
#include <ctype.h>
using namespace std;

int main()
{
setlocale(0,"");
char *p;
int i;
char str[80] = "Сникерс Настоящий";
p = str;
for(i = 0; p[i]; i++) {
if(isupper(p[i]))
p[i] = tolower(p[i]);
else
if(islower(p[i]))
p[i] = toupper(p[i]);
}


cout<<"Результат\n"<<str;
cin.get();
}


Дело в том,что в результате, программа должна выдать результат:
сНИКЕРС нАСТОЯЩИЙ, а программа выводит: сНИКЕРС нАСТОяЩИЙ
НЕ знаю почему.

Это сообщение отредактировал(а) Syltan - 7.9.2009, 14:08
PM MAIL   Вверх
mekhanikus
Дата 7.9.2009, 14:16 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: нет
Всего: 1



Цитата(Syltan @  7.9.2009,  14:07 Найти цитируемый пост)
for(i = 0; p[i]; i++) 

Как-то странно верхний предел задан.
PM MAIL   Вверх
andrew_121
Дата 7.9.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(mekhanikus @  7.9.2009,  14:16 Найти цитируемый пост)
Как-то странно верхний предел задан. 

правильно. пока не нулевой символ.

Добавлено через 1 минуту и 27 секунд
Цитата(Syltan @  7.9.2009,  14:07 Найти цитируемый пост)
сНИКЕРС нАСТОЯЩИЙ, а программа выводит: сНИКЕРС нАСТОяЩИЙ

Русская буква "я" имеет двойное значение.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Syltan
Дата 7.9.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Как это, не так ввёл букву "я" может?
PM MAIL   Вверх
andrew_121
Дата 7.9.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(Syltan @  7.9.2009,  14:29 Найти цитируемый пост)
Как это, не так ввёл букву "я" может? 

напиши другой текст, без "я"


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Syltan
Дата 7.9.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



А что делать,если буква "я" будет нужна для использования.
PM MAIL   Вверх
mekhanikus
Дата 7.9.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: нет
Всего: 1



Цитата(andrew_121 @  7.9.2009,  14:24 Найти цитируемый пост)
правильно. пока не нулевой символ.

Я сам догадался  smile 
PM MAIL   Вверх
bsa
Дата 7.9.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Syltan, пройдись отладчиком. Найди причину этой проблемы. Возможно, все дело в том, что isupper возвращет TRUE.
PM   Вверх
586
Дата 7.9.2009, 17:48 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Код
#include <iostream>
#include <ctype.h>
using namespace std;

int main()
{
    setlocale(0,"");
    char *p;
    int i;
    char str[80] = "Сникерс Настоящий";
    p = str;
    for(i = 0; p[i]; i++) {
        if(isupper(p[i]))
            p[i] = tolower(p[i]);
        else
            //if(islower(p[i]))
                p[i] = toupper(p[i]);
    }
    cout<<"Результат\n"<<str;
    cin.get();
}


Добавлено через 8 минут и 52 секунды
Проблема в islower:
Код
#include <iostream>
#include <ctype.h>
using namespace std;

int main()
{
    setlocale(0,"");
    std::cout << "isupper = " << (isupper('я') ? "true" : "false") << std::endl
            << "islower = " << (islower('я') ? "true" : "false") << std::endl;
}

Код
isupper = false
islower = false

PM   Вверх
zim22
Дата 7.9.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(586 @  7.9.2009,  17:48 Найти цитируемый пост)
Проблема в islower

 smile 
Код

#include <iostream>
#include <ctype.h>
using namespace std;

int main()
{
    _locale_t locale = _create_locale(LC_ALL, "Russian_Russia.1251");
    std::cout << "isupper = " << (_isupper_l((unsigned char)'я', locale) ? "true" : "false") << std::endl
              << "islower = " << (_islower_l((unsigned char)'я', locale) ? "true" : "false") << std::endl;
  _free_locale(locale);
}


Это сообщение отредактировал(а) zim22 - 7.9.2009, 18:25


--------------------
PM MAIL   Вверх
Syltan
Дата 7.9.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Всем спасибо, оказывается ничего изменять не нужно было, а просто набрать вместо,
Код

setlocale( 0, "" );

набрать:
Код

setlocale( LC_ALL, "" );


Всем спасибо за ответы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0905 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.