Gautam Naresh Ответов: 2

Как сравнить все похожие имена переменных сразу


#include <iostream>

using namespace std;

int main()
{
    int a;
int my_name=1;
int my_class=5;
int my_age=3;
cout<<"enter the number"<<endl;
cin>>a;
if (a==my_*){
    cout<<"success";
}

}


Что я уже пробовал:

любой другой процесс быстрого доступа, кроме этого
if ((a==my_name)&&(a==my_class)&&(a==my_age)){
    cout<<"success";

2 Ответов

Рейтинг:
0

Rick York

Кстати - с теми значениями, которые вы присвоили этим переменным, ваше условие "ярлыка" никогда не будет истинным.

Я нахожу макросы полезными в подобных ситуациях. Ими определенно можно злоупотреблять злым образом, но они также могут быть весьма полезны. Вот как бы я это сделал :

using PCTSTR = const char *;

bool CompVarValues( PCTSTR varname, int value1, int value2 )
{
   bool state = ( value1 == value2 );
   PCTSTR boolstr = state ? "true" : "false";
   std::cout << "comparing value of " << varname << " result is " << boolstr << std::endl;
}

// a macro to help with this - it uses the string-izing operator #

#define CompareValues( a, b )  CompVarValues( #a, a, b )

// usage :

CompareValues( my_name, a );
CompareValues( my_class, a );
CompareValues( my_age, a );


Richard MacCutchan

+5. и использование стрингайзера-это единственный раз, когда я когда-либо создавал макросы в эти дни.

Рейтинг:
0

CPallini

Например, можно выполнить итерацию по контейнеру

#include <iostream>
#include <unordered_map>
using namespace std;

int main()
{
  int a;

  unordered_map<string, int> um = { {"my_name", 1}, {"my_class", 5}, {"my_age", 3} };

  cout<<"enter the number"<< endl;
  cin >> a;

  unsigned matches = 0;

  for (auto p : um )
    if ( p.second == a)
      ++matches;

  if ( matches == um.size() )
    cout << "success" << endl;
  else
    cout << "failure, matches " << matches << "/" << um.size() << endl;

}