NotCoolProgrammer
@NotCoolProgrammer

Comparison between pointer and integer. Как решить?

Задание: вывести все номера, которые начинаются с "22"
Ошибка (29 строка): comparison between pointer and integer ('char *' and 'char')
if (s[0].pnumber == '2' && s[1].pnumber == '2')
Что сделать, дабы решить проблему?
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int main ( )
{
int n;
cout<<"Enter number of subscribers: ";
cin>>n;
struct subscriber
{ int number;
char FIO[40];
char address[50];
char pnumber[10];
int duty;
}s[n];
int i;
for (i=0;i<n;i++)
{ cout<<"Number: "; cin>>s[i].number;
cout<<"FIO: "; cin>>s[i].FIO;
cout<<"Address: "; cin>>s[i].address;
cout<<"Phone number "; cin>>s[i].pnumber;
cout<<"Duty: "; cin>>s[i].duty;
}
float max=0;
int imax= -1;
cout<<"Result"<<endl;
for (i=0;i<n;i++)
if (s[0].pnumber == '2' && s[1].pnumber == '2')
if (s[i].duty> max ) { max= s[i].duty; imax=i;}
if (imax> -1)
{
cout<<"Number: "<<s[imax].number<<endl;
cout<<"FIO: "<<s[imax].FIO<<endl;
cout<<"Address: "<<s[imax].address<<endl;
cout<<"Phone number: "<<s[imax].pnumber<<endl;
cout<<"Duty: "<<s[imax].duty<<endl;
} else cout<<"No debtors were found"<<endl;
return 0;
}
  • Вопрос задан
  • 507 просмотров
Решения вопроса 2
@Mercury13
Программист на «си с крестами» и не только
Несколько вариантов.
1. pnumber превратить в string
2. strncmp(s[0].pnumber, std::size(s[0].pnumber), "2") == 0
3. std::string_view(s[0].pnumber) == "2"
Прости, глючу, и там. и там нужны двойные кавыки
Ответ написан
0hquazEd
@0hquazEd
У тебя ошибка потому что pnumber - это массив символов, и ты пытаешься сравнить весь массив с одним символом. Тебе нужно было писать s[0].pnumber[0] == '2' && s[1].pnumber[1] == '2', чтобы сравнить первые два символа массива с двойками. Кроме того зачем тебе переменная max, которая является float при том, что в структуре duty(если использовать правильный перевод, то debt) хранится в виде int, ведь нигде кроме присвоений она не используется. Вот что получилось у меня, может узнаешь что-то новое.
Код

#include <iostream>
struct subscriber
{
	int number;
	std::string name;
	std::string address;
	std::string phone_number;
	int debt;
};

int main(int argc, char** argv)
{
	int subscribers_amount = 0;
	std::cout << "Enter the number of subscribers: " << std::endl;
	std::cin >> subscribers_amount;

	std::vector<subscriber> subscribers(subscribers_amount);
	for (auto& subscriber : subscribers)
	{
		std::cout << "Number: "; std::cin >> subscriber.number;
		std::cout << "Debt: "; std::cin >> subscriber.debt;

		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
		
		std::cout << "Name: "; std::getline(std::cin, subscriber.name);
		std::cout << "Address: "; std::getline(std::cin, subscriber.address);
		std::cout << "Phone number: "; std::getline(std::cin, subscriber.phone_number);

		std::cout << std::endl;
	}

	int max_debt_subscriber = -1;

	for (int i = 0; i < subscribers.size(); i++)
	{
		if (subscribers[i].phone_number.substr(0, 2) == "22")
		{
			if (subscribers[i].debt > subscribers[max_debt_subscriber].debt)
			{
				max_debt_subscriber = i;
			}
		}
	}

	if (max_debt_subscriber != -1)
	{
		std::cout << "Number: " << subscribers[max_debt_subscriber].number << std::endl;
		std::cout << "Name: " << subscribers[max_debt_subscriber].name << std::endl;
		std::cout << "Address: " << subscribers[max_debt_subscriber].address << std::endl;
		std::cout << "Phone number: " << subscribers[max_debt_subscriber].phone_number << std::endl;
		std::cout << "Debt: " << subscribers[max_debt_subscriber].debt << std::endl;
	}
	else
	{
		std::cout << "No subscribers found" << std::endl;
	}

	return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы