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

Ошибка вывода букв - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Массивы(Экзаменационная прога) http://www.cyberforum.ru/cpp-beginners/thread276507.html
Помогите пожалуйста прога на экзамене попалась теперь надо сделать. Задание: Дан одномерный целочисленный массив отсортированный в порядке не убывания необходимо вставить элемент x(вводиться пользователем) так чтобы порядок не изменился, СОРТИРОВКИ ИСПОЛЬЗОВАТЬ НЕЛЬЗЯ. необходимо использовать указатели вот мой код помогите пожалуйста исправить #include<iostream> using namespace std; void...
C++ БНФ в языке C++ мне для начала хотелось бы узнать что это, а лучше источники, где можно почитать подробно(книги, сайты) помогите плиз) http://www.cyberforum.ru/cpp-beginners/thread276506.html
C++ Присвоение значения в классе!!
тут два класса как вывести на экран значение углов в минутах и градусах?????????? Скажите , а то с ума схожу уже я!! #include <math.h> #include <iostream> #include "class.h" #include "angle.h" using namespace std; Triangles::Triangles(){ q=w=e=0;
C++ Вставка нового узла в двусвязный список
процедура вставки нового узла. Вот сделала вставку в голову и в хвост. но проблема с процедурой вставки узла после текущего узла и перед ним. Помогите разобраться. #include <iostream> #include <conio.h> #include <stdlib.h> #include <cstring> #include <math.h> using namespace std;
C++ Задано два натуральных числа: m и n. Определить, сколько цифр содержится в десятичной записи числа m^n. http://www.cyberforum.ru/cpp-beginners/thread276475.html
C++ Builder метод класса Добрый вечер. Пишу телефонный справочник. Написал класс: lass Abonent { private: public: /*ПОЛЯ*/ подробнее

Показать сообщение отдельно
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.04.2011, 19:56     Ошибка вывода букв
bossman, вы в rus переписываете то, что было передано по указателю при вызове. В вашем случае - константу. Естественно оно будет поганить её. Хотя у меня вообще вылетает. Не переписывайте константы. Делайте либо так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char *rus( char *st )
{
  char *p = st;
 
  while( *p )
  {
        if ( *p >= 'А' && *p <= 'п' )
          *p -= 64;// А,Б,В ... Я,а,б,в ... п
        else if( *p >= 'р' && *p <= 'я' )
          *p -= 16;// р ... я
 
        p++;
  }
 
  return st;
}
 
int main(int argc, char* argv[])
{
        int n=0;
        while(n++<2)
        {
            char str[255];
            strcpy( str, "\nВведите через пробел номера вершин, между которыми определяется путь" );
 
            puts( rus(str) );
        }
 
        return 0;
}
либо так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char *rus( char *st )
{
  char * ret = (char*)malloc( strlen(st) * sizeof st );
  char * p = ret;
 
  strcpy( p, st );
 
  while( *p )
  {
        if ( *p >= 'А' && *p <= 'п' )
          *p -= 64;// А,Б,В ... Я,а,б,в ... п
        else if( *p >= 'р' && *p <= 'я' )
          *p -= 16;// р ... я
 
        p++;
  }
 
  return ret;
}
 
int main(int argc, char* argv[])
{
    int n=0;
    while(n++<2)
    {
        char * rus_str = rus( "\nВведите через пробел номера вершин, между которыми определяется путь" );
 
        puts( rus_str );
 
        free( rus_str ); // освободите потом!
    }
 
    system( "pause" );
 
    return 0;
}
Но оба варианта некрасивые. В идеале - сохраняйте исходник в кодировке DOS866, либо ипользуйте widechar и локали:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>
 
int main(int argc, char* argv[])
{
    setlocale( LC_ALL, "rus_rus.866" );
 
    int n = 0;
    while( n++ < 2 )
    {
        wprintf( L"Введите через пробел номера вершин, между которыми определяется путь\n" );
    }
 
    system( "pause" );
 
    return 0;
}
Добавлено через 1 минуту
Либо, если вам не обязателен C, делайте как garkeP91. Но лучше с кодировкой (смысл перекодировать данные в процессе работы?) или с локалями.
 
Текущее время: 00:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru