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

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

Восстановить пароль Регистрация
 
Arl
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 22
16.09.2010, 00:05     Проблема с перечислениями #1
Помогите ,пожалуйста, с этим 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++ Проблема с opendir
Проблема с линковкой C++
проблема с шаблоннами C++
Проблема в стэке C++
Проблема C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
.::.DIMA.::.
142 / 142 / 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
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
16.09.2010, 01:01     Проблема с перечислениями #6
Я так понимаю getline() предназначен как раз для string , а не для char
Если включить #include <string> то все будет путем
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
 Аватар для 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
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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
 Аватар для 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++
 Аватар для niXman
3133 / 1445 / 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
16.09.2010, 02:09     Проблема с перечислениями #14
Arl, Елы палы. Я думал char[]... Ну для string именно через ==.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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, 10:21     Проблема с перечислениями
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
16.09.2010, 10:21     Проблема с перечислениями #16
Arl, если ипользуете string, то сравнивать строки нужно через оператор '==', если char * , то strcmp. String у вас не работает, скорее всего, из-за того, что не подключили <string>.
Yandex
Объявления
16.09.2010, 10:21     Проблема с перечислениями
Ответ Создать тему
Опции темы

Текущее время: 23:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru