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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
Macar
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
#1

Число прописью, от 1 до 99 на русском - C++

30.08.2011, 21:57. Просмотров 2544. Ответов 7
Метки нет (Все метки)

Программа работает, но не совсем правильно, отлично выводит числа от 1 до 20 потом при вводе
21 - выводит один один;
47 - выводит семь семь;
83 - выводит три три.
Помогите исправить ошибку.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <windows.h>
using namespace std;
 char*Rus(const char* text);
 int main()
{
        int k;
        char *s,*s1;
        cin>>k;
        s1="";
        s="";
    if ((k>=10) && (k<20))
    {
        switch(k)
        {
         case 10: s=Rus("десять");break;
         case 11: s=Rus("одиннадцать");break;
         case 12: s=Rus("двенадцать");break;
         case 13: s=Rus("тринадцать");break;
         case 14: s=Rus("четырнадцать");break;
         case 15: s=Rus("пятнадцать");break;
         case 16: s=Rus("шестнадцать");break;
         case 17: s=Rus("семнадцать");break;
         case 18: s=Rus("восемнадцать");break;
         case 19: s=Rus("девятнадцать");break;
        }
    }
    else
    {
     switch(k/10)
     {
        case 2: s=Rus("двадцать");break;
        case 3: s=Rus("тридцать");break;
        case 4: s=Rus("сорок");break;
        case 5: s=Rus("пятьдесят");break;
        case 6: s=Rus("шестьдесят");break;
        case 7: s=Rus("семьдесят");break;
        case 8: s=Rus("восемьдесят");break;
        case 9: s=Rus("девяносто");break;
       
     };
     switch(k%10)
     {
        case 1: s1=Rus("один");break;
        case 2: s1=Rus("два");break;
        case 3: s1=Rus("три");break;
        case 4: s1=Rus("четыре");break;
        case 5: s1=Rus("пять");break;
        case 6: s1=Rus("шесть");break;
        case 7: s1=Rus("семь");break;
        case 8: s1=Rus("восемь");break;
        case 9: s1=Rus("девять");break;   
        };
    };
    cout<<s<<" "<<s1<<endl;
    return 0;
}
char bufRus[500];
char* Rus(const char* text) {
    CharToOemA(  text, bufRus);
    return bufRus;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
30.08.2011, 22:46     Число прописью, от 1 до 99 на русском #2
Функция Rus использует буфер bufRus для преобразования и возвращает указатель на этот буфер. Следующий вызов Rus изменяет значение в буфере, но возвращает тот же самый указатель. Поэтому предыдущий указатель указывает теперь уже на новое содержимое того же самого буфера. То есть результат, полученный вызовом Rus можно использовать лишь до следующего вызова этой функции, иначе же полученную строку придётся скопировать.

Добавлено через 3 минуты
Можно, к примеру, s и s1 сделать массивами
C++
1
char s[500], s1[500];
А вместо присваивания использовать функцию strcpy()
C++
1
case 2: strcpy(s, Rus("двадцать")); break;
Добавлено через 1 минуту
Или же вместо строк в C-стиле использовать std::string
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
30.08.2011, 23:34     Число прописью, от 1 до 99 на русском #3
Macar, Советую воспользоваться поиском по форуму. Где-то я видел решение твоей задачи для чисел до квадриллиона. Если, конечно, тебе это интересно.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
30.08.2011, 23:45     Число прописью, от 1 до 99 на русском #4
Цитата Сообщение от Day Посмотреть сообщение
Где-то я видел решение твоей задачи для чисел до квадриллиона
может быть тут
Вывести число прописью
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
30.08.2011, 23:52     Число прописью, от 1 до 99 на русском #5
PointsEqual, Совершенно верно. Просто забыл - где, а искать было в лом.
Macar
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
31.08.2011, 00:13  [ТС]     Число прописью, от 1 до 99 на русском #6
grizlik78 Ваш вариант мне больше понятен, только теперь проблема в том что при вводе цифр от 1 до 20 и 30, 40, 50... выводит лишние символы. Прошу прощения может я что то не так сделал, я пока в программировании не силен
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <windows.h>
using namespace std;
 char*Rus(const char* text);
 
int main()
{
        int k;
        char s[500], s1[500];
        cin>>k;
      //  s1="";
       // s="";
    if ((k>=10) && (k<20))
    {
        switch(k)
        {
         case 10: strcpy (s, Rus("десять"));break;
         case 11: strcpy (s, Rus("одиннадцать"));break;
         case 12: strcpy (s, Rus("двенадцать"));break;
         case 13: strcpy (s, Rus("тринадцать"));break;
         case 14: strcpy (s, Rus("четырнадцать"));break;
         case 15: strcpy (s, Rus("пятнадцать"));break;
         case 16: strcpy (s, Rus("шестнадцать"));break;
         case 17: strcpy (s, Rus("семнадцать"));break;
         case 18: strcpy (s, Rus("восемнадцать"));break;
         case 19: strcpy (s, Rus("девятнадцать"));break;
        }
    }
    else
    {
     switch(k/10)
     {
            
 
        case 2: strcpy (s, Rus("двадцать")); break;
        case 3: strcpy (s, Rus("тридцать"));break;
        case 4: strcpy (s, Rus("сорок"));break;
        case 5: strcpy (s, Rus("пятьдесят"));break;
        case 6: strcpy (s, Rus("шестьдесят"));break;
        case 7: strcpy (s, Rus("семьдесят"));break;
        case 8: strcpy (s, Rus("восемьдесят"));break;
        case 9: strcpy (s, Rus("девяносто"));break;
       
     };
     switch(k%10)
     {
        case 1: strcpy (s1 , Rus("один"));break;
        case 2: strcpy (s1 , Rus("два"));break;
        case 3: strcpy (s1 , Rus("три"));break;
        case 4: strcpy (s1 , Rus("четыре"));break;
        case 5: strcpy (s1 , Rus("пять"));break;
        case 6: strcpy (s1 , Rus("шесть"));break;
        case 7: strcpy (s1 , Rus("семь"));break;
        case 8: strcpy (s1 , Rus("восемь"));break;
        case 9: strcpy (s1 , Rus("девять"));break;
       
        };
    };
    
    cout<<s<<" "<<s1<<endl;
    return 0;
}
char bufRus[500];
char* Rus(const char* text) {
    CharToOemA(  text, bufRus);
    return bufRus;
}
Миниатюры
Число прописью, от 1 до 99 на русском  
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
31.08.2011, 00:41     Число прописью, от 1 до 99 на русском #7
Ну так ведь теперь строки изначально не инициализированы.
C++
1
char s[500] = "", s1[500] = "";
или
C++
1
2
strcpy(s, "");
strcpy(s1, "");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2011, 01:04     Число прописью, от 1 до 99 на русском
Еще ссылки по теме:

C++ Вывести прописью введенное пользователем число
C++ Число прописью
Вывести число прописью C++
C++ Вывести число прописью на английском языке
C++ Вывести трехзначное число прописью

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Macar
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
31.08.2011, 01:04  [ТС]     Число прописью, от 1 до 99 на русском #8
Огромное спасибо!!!grizlik78
Yandex
Объявления
31.08.2011, 01:04     Число прописью, от 1 до 99 на русском
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru