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

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

Войти
Регистрация
Восстановить пароль
 
 
Arl
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 22
#1

Проблема с перечислениями - C++

16.09.2010, 00:05. Просмотров 659. Ответов 15
Метки нет (Все метки)

Помогите ,пожалуйста, с этим enum-ом!! Никак не могу разобраться в нем...

Есть:
C++
1
enum Agree {Yes=1, No=0};
Как сделать так, чтобы пользователь ввел слово Yes или No, оно считало и вернуло бы значение соотв.??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2010, 00:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проблема с перечислениями (C++):

Работа с перечислениями - C++
Здравствуйте. Помогите, пожалуйста, разобраться как работать с перечислениями. Есть некая библиотека(книжная), которую мы заполняем в...

Перечисления (enum): для чего они нужны? Как, когда и какими перечислениями уместнее пользоваться? - C++
Предположим есть такой код: #include <iostream> #include <iomanip> #include <Windows.h> enum airplanes {SU6, SU29, SU34}; //...

Работа с перечислениями - C#
Допустим я обьявил перечисление enum Day { monday = 1, tuesday, wednesday, thursday, ...

Как правильно работать с перечислениями? - C#
Помогите с перечисленнием типа (enum). Уже кучу всего перчитал, но не могу до конца понять. class parttov: flowerp { public enum...

Не получается разобраться с перечислениями enum - Java SE
Вот калькулятор с помощью enum надо создать. И меню выбора операции чтобы было («+» – сложение, «-» – вычитание, «*» – умножение, «/» –...

Отступы между перечислениями в списке - HTML, CSS
У меня есть список, но отступ между надписями очень маленький. как это исправить? br не работает, при помощи br отступ будет слишком...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
16.09.2010, 00:17 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
 
enum agree {yes, no};
 
int main()
{
    agree a;
    std::string s;
    std::cin >> s;
    if (s == "Yes")
        a = yes;
    else
        if (s == "No")
            a = no;
    return 0;           
}
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
16.09.2010, 00:36 #3
о, как!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
 
int main(){
    std::string answ[2] = { std::string("no"), std::string("yes") }, buf;
    std::cout << "yes or no? ";
    std::cin >> buf;
    std::string * ptr = (std::string*)std::find(answ, answ + 2, buf);
    std::cout << ( ( ptr < answ + 2 ) ? (int)std::distance(answ, ptr) : -1 ) << std::endl;
    return 0;
}
Arl, а вообще-то у enum другое назначение...
Arl
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 22
16.09.2010, 00:53  [ТС] #4
.::.DIMA.::., спасибо за подсказку!! но у меня тип стринг не работает((( но эту проблему я уже исправил,.. вот мой код. но мне почему-то выводит все время Incorrect Data, даже если ввожу Yes или No!! ((((( не могу понять почему(((

C++
1
2
3
4
5
6
7
8
9
10
void Connection::Set_Benefits()
    {
        char s[10];
        agree b;        
        cin.getline(s,3);
        if (s == "Yes") {b = Yes; cout<</*"Yeah"*/s<<endl;}
        else {if (s == "No") {b = No; cout<</*"No"*/s<<endl<<b;} else cout<<"Incorrect Data";}
 
        
    };
Добавлено через 4 минуты
easybudda, спасибо) сложный код немного с этими указателями) просто у меня такая задача - создать класс с обьектами.. название товара, и его наличие/отсутствие... название понятно - массив символов (у меня стринг не работает почему-то...((() , а вот наличие - я подумал сделать enum-ом... теперь вот мучаюсь с ним, а завтра сдавать уже(((
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.09.2010, 00:57 #5
Arl,
C++
1
 if (s == "Yes")
Так не сравнивают С-строки.
C++
1
2
3
4
if(!strcmp(s, "Yes")
else 
   if(!strcmp(s, "No");
   else //
Или
C++
1
if(strcmp(s, "Yes")==0)
что эквивалентно
C++
1
if(!strcmp(s, "Yes"));
TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
16.09.2010, 01:01 #6
Я так понимаю getline() предназначен как раз для string , а не для char
Если включить #include <string> то все будет путем
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.09.2010, 01:03 #7
NikolaWhite,
C++
1
cin.getline(s,3);
Для С-строк. Для string другой метод, а именно
C++
1
std::getline(std::cin, str);
Arl
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 22
16.09.2010, 01:19  [ТС] #8
Lavroff, привет! опять ты мне помагаешь)) спасибо огромное)) я сделал так как ты нписал .но у меня выдает ошибку: error C2664: strcmp: невозможно преобразовать параметр 1 из 'std::string' в 'const char *'
на строке
C++
1
if(!strcmp(s, "Yes"));
(((

NikolaWhite, угу ,я уже понял......
TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
16.09.2010, 01:23 #9
дак у тебя s какого типа string или char?
Arl
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 22
16.09.2010, 01:25  [ТС] #10
NikolaWhite, string, я уже исправил)
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
16.09.2010, 01:37 #11
Цитата Сообщение от Arl Посмотреть сообщение
название товара, и его наличие/отсутствие... название понятно - массив символов (у меня стринг не работает почему-то...((() , а вот наличие - я подумал сделать enum-ом...
А чем bool не устроил?
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
...
class Tovar{
  char title[256];
  bool na_sklade;
...
public:
...
    bool naSklade() const {
        return na_sklade;
    }
    void naSklade(bool b) {
        na_sklade = b;
    }
...
};
...
int main(){
    Tovar tovar;
...
    char answ[4];
    std::cout << "Na sklade? ";
    std::cin.get(answ, 4);
    tovar.naSklade( *answ == 'y' || *answ == 'Y' );
....
}
TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
16.09.2010, 02:01 #12
Если писать

C++
1
if(s == "yes")
вместо
C++
1
2
3
4
if(!strcmp(s, "Yes")
else 
   if(!strcmp(s, "No");
   else //
то все будет работать

Добавлено через 10 минут
А тут переменная должна быть типа char:

C++
1
2
3
4
5
char ch[4];
    Agree a;
    cin.getline(ch, 4);
    if(!strcmp(ch, "yes"))
        cout << "Available";
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
16.09.2010, 02:07 #13
Цитата Сообщение от easybudda Посмотреть сообщение
std::string * ptr = (std::string*)find(answ, answ + 2, buf);
* * std::cout << ( ( ptr < answ + 2 ) ? (int)std::distance(answ, ptr) : -1 ) << std::endl;
товарищ easybudda, поясните пожалуйста сакральный смысл такого решения
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.09.2010, 02:09 #14
Arl, Елы палы. Я думал char[]... Ну для string именно через ==.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
16.09.2010, 09:55 #15

Не по теме:

Цитата Сообщение от niXman Посмотреть сообщение
товарищ easybudda, поясните пожалуйста сакральный смысл такого решения
Да тут по телевизору кино индийское показывали - навеяло... Вернётся или индекс в массиве слова, совпавшего с ответом, или -1 если что-нибудь кроме yes/no написать...



Добавлено через 11 минут
niXman, кстати, спасибо - ошибку заметил: там
C++
1
std::string * ptr = (std::string*)std::find(answ, answ + 2, buf);
должно быть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2010, 09:55
Привет! Вот еще темы с ответами:

Работа с перечислениями - виды цветов волос - C#
Виды цветов волос (брюнет, блондин, рыжий и т.д.) Необходимо выполнить следующие операции с перечислениями: 1) описать перечисление...

проблема - Windows 7
Проблема в следующем: выбил экран смерти и вот такие ошибки: STOP:0.000000BE (0.82A99478, 0.02а99121,0.А3В5С3С, 0.0000000B) И еще...

Проблема с like - MySQL
Почему не работает select * from `data` where `name_data` like '%строка запроса%' Выдает результат 0 строк, хотя я точно знаю, что...

Проблема - Wi-Fi
3 дня назад подключил wifi,после этого начались такие проблемы,когда захожу на сервер программы teamspeak 3,то у меня через секунд 20...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.09.2010, 09:55
Ответ Создать тему
Опции темы

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