0 / 0 / 0
Регистрация: 18.09.2015
Сообщений: 10
1

Элементарная программа не работает. Почему?

18.09.2015, 12:27. Показов 822. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Несколько лет не юзал плюсы. Что-то изменилось или я что-то забыл? Почему работает не правильно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string.h>
 
using namespace std;
 
int main()
{
    setlocale (LC_ALL, "RUS");
    float sqare;
    int zp, price = 200;
    string fio;
    cout << "Введите ФИО:" << endl;
    cin >> fio;
    cout << "Введите площадь:" << endl;
    cin >> sqare;
    zp = sqare * 200;
    cout << fio << ":" << endl;
    cout << "Ваша зарплата составляет: " << zp << "руб. за " << sqare << "кв.м." << endl;
    return 0;
}
через char тоже пробовал, не пашет
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2015, 12:27
Ответы с готовыми решениями:

Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает
почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает. Имею...

Элементарная программа
Задано действительное число а. Пользуясь только операцией умножения, получить а2, а12 и А20 за...

Элементарная программа
Элементарная программа но не пашет #include &lt;unistd.h&gt; int main(){ execl(&quot;/bin/ls&quot;,&quot;ls&quot;,0);...

Вылетает элементарная программа
Добрый день! Компилится нормально, но при запуске вылетает с эррором. В чем дело? + Пожалуйста...

20
Заблокирован
18.09.2015, 12:33 2
Что именно работает не правильно?
0
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
18.09.2015, 12:50 3
C++
1
#include <string>
1
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
18.09.2015, 12:51 4
Цитата Сообщение от ДурачОк Посмотреть сообщение
Что-то изменилось или я что-то забыл? Почему работает не правильно?
Может дело в том, что zp типа int и при присваивании sqare * 200, дробная часть отбрасывается?
Но это так было всегда.
0
0 / 0 / 0
Регистрация: 18.09.2015
Сообщений: 10
18.09.2015, 12:54  [ТС] 5
MotionMaster, вместо введенных ФИО выводит иероглифы.
zss, не помогло
DrOffset, хорошее замечание. спасибо! но я говорил про другую проблему
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
18.09.2015, 12:55 6
ДурачОк, кодировка
0
0 / 0 / 0
Регистрация: 18.09.2015
Сообщений: 10
18.09.2015, 12:56  [ТС] 7
Kerry_Jr, а как изменить? от IDE зависит?
0
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
18.09.2015, 12:57 8
Цитата Сообщение от ДурачОк Посмотреть сообщение
но я говорил про другую проблему
В том и дело, что не понятно про какую.
Если ошибка компиляции - то в студию ее.
Если ошибка в логике работы, то надо описать то поведение, которое является правильным с твоей точки зрения.
0
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
18.09.2015, 12:58 9
setlocale позволяет выводить в консоль символы в кодировке Windows.
Однако ввод остается старым (в кодировке 866).
C++
1
2
3
4
5
6
#include <windows.h>
...
    char fio[100];
    cout << "Введите ФИО:" << endl;
    cin >> fio;
    OemToChar(fio,fio);
0
0 / 0 / 0
Регистрация: 18.09.2015
Сообщений: 10
18.09.2015, 12:58  [ТС] 10
DrOffset, вместо введенных ФИО выводит иероглифы
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
18.09.2015, 12:59 11
ДурачОк, а все остальное, что кириллицей написано, нормально выводится?
0
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
18.09.2015, 12:59 12
В порядке телепатии.
Цитата Сообщение от ДурачОк Посмотреть сообщение
cin >> fio;
C++
1
std::getline(std::cin, fio);
Если там ФИО, то по любому будут пробелы. А >> читает только до пробела.
0
0 / 0 / 0
Регистрация: 18.09.2015
Сообщений: 10
18.09.2015, 13:01  [ТС] 13
zss, иероглифы изменились на символы и английские буквы
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
18.09.2015, 13:01 14
Цитата Сообщение от ДурачОк Посмотреть сообщение
иероглифы изменились на символы и английские буквы
у Вас кодировка в консоли какая? UTF-8?
1
0 / 0 / 0
Регистрация: 18.09.2015
Сообщений: 10
18.09.2015, 13:06  [ТС] 15
DrOffset, иероглифы

Добавлено через 3 минуты
Kerry_Jr, Kerry_Jr, windows-1251
0
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
18.09.2015, 13:08 16
Цитата Сообщение от ДурачОк Посмотреть сообщение
иероглифы
Я это писал когда еще не видел твое сообщение про иероглифы.
Это разные проблемы. Твоя проблема не связана напрямую с С++, это особенность виндовой консоли, которая работает в кодировке DOS 866 на русской винде. Забороть это можно разными способами, но простые способы зависят от используемой среды.
Код пишем в VS?
0
0 / 0 / 0
Регистрация: 18.09.2015
Сообщений: 10
18.09.2015, 13:27  [ТС] 17
DrOffset, codeblock

Добавлено через 7 минут
Kerry_Jr, скажите какую поставить кодировку. я нашёл где менять

Добавлено через 2 минуты
Kerry_Jr,

Не по теме:

пол жизни прожил в Сочи. Как он там после моего уезда? Не раздраконили? :)



Добавлено через 1 минуту

Не по теме:

ошибка не в коде и желающих помочь стало меньше :D

0
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
18.09.2015, 13:29 18
Попробуйте поменять OemToChar(fio,fio);
На
C++
1
CharToOem(fio,fio);
1
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
18.09.2015, 13:32 19
Цитата Сообщение от ДурачОк Посмотреть сообщение
codeblock
Простой способ, но не самый хороший, состоит в том, чтобы преобразовать кодировку из 866 в текущую системную.
Для этого есть функция OemToChar
Можно сделать как-то так:
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
#include <iostream>
#include <string>
#include <vector>
#include <windows.h>
 
using namespace std;
 
std::string conv(std::string const & x)
{
    if(size_t len = x.size())
    {
        std::vector<char> buf(len + 1);
        OemToChar(x.c_str(), &buf[0]);
        return std::string(buf.begin(), buf.end());
    }
    return x;
}
 
int main()
{
    setlocale(LC_ALL, "RUS");
 
    float sqare;
    float zp, price = 200;
    string fio;
    cout << "Введите ФИО:" << endl;
    getline(cin, fio);
    cout << "Введите площадь:" << endl;
    cin >> sqare;
    zp = sqare * 200;
 
    cout << conv(fio) << ":" << endl;
    cout << "Ваша зарплата составляет: " << zp << "руб. за " << sqare << "кв.м." << endl;
    return 0;
}
Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от ДурачОк Посмотреть сообщение
ошибка не в коде и желающих помочь стало меньше
Слишком быстро хотите результата. Нужно быть терпеливее.

1
0 / 0 / 0
Регистрация: 18.09.2015
Сообщений: 10
18.09.2015, 13:34  [ТС] 20
DrOffset, и мне потом к каждой программе этот вагон цеплять? должно быть общее решение. Попробую погуглить, вам спасибо. и вам zss, и вам Kerry_Jr, и вам за участие MotionMaster,
Если вдруг будет решение - отпишитесь пжл тут. Я поставлю уведомление на почту
0
18.09.2015, 13:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2015, 13:34
Помогаю со студенческими работами здесь

label элементарная программа
Всем привет! Такая проблема, label не отображается на экране. Вот пару строчек, на которые я...

Первая элементарная программа
Хочу написать свою первую программу на Java и не могу. По идее она должна запрашивать у...

Элементарная программа на файлы
Здравствуйте ув. форумчане. Нужно реализовать простенькую программу которая будет при запуске...

Элементарная задача с Циклом. Почему код выполняется именно 8 раз?
Добрый день, сижу целый день и не могу понять почему именно так, можно расписать по полочкам...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru