Member 13479017 Ответов: 1

Я просто не уверен в том, как правильно использовать оператор if с массивами?


Я хочу использовать оператор if, который будет брать информацию из файла и прогонять каждое число. Я не знаю, как его отформатировать, потому что использую массивы. Ошибка, которую я получаю, - это "недопустимые типы ‘int[int]’ для индекса массива" для каждой части оператора if.
Вот мой полный код. Я знаю, что в этом коде есть и другие ошибки, но именно эта часть сбивает меня с толку больше всего на данный момент. Спасибо за любую помощь.

#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
 
using namespace std ;
 
int main () 
{
	string names [50] ;		// Elf's name
	int numToys [50] ;		// Number of toys made by each elf
	string rating [50] ;		// Rating for elves based on number of toys
	string line = " " ;
	ifstream ins ; 			
	ins.open ("elves.dat") ;
	int i = 0 ;
	istringstream iss (line) ;
	while (getline(ins, line))
	{
		istringstream iss (line) ;
		iss >> names [i] >> numToys [i] ;
		i++ ;
	for (int ii = 0 ; ii < 50 ; ii++)
	{
		cout << setw(0) << left << "Elves name:" << names[ii] ;
		cout << setw(10) << "Number of Toys Produced:" << numToys[ii] ;
		cout << setw(20) << "Rating:" << rating[ii] ;
	}
	cin.ignore () ;
	cout << names[0] ;
	}
}

void elfRating (int numToys, string&rating) 
{
	int t = 0 ;
	if (numToys [t] < 200)
	{
		rating = "-" ;
		t++ ;
	}
	else if (numToys [t] < 300)
	{
		rating = "*" ;
		t++ ;
	}
	else if (numToys [t] < 500)
	{
		rating = "***" ;
		t++ ;
	}
	else if (numToys [t] > 500)
	{
		rating = "*****" ;
		t++ ;
	}
	else
	{
		cout << "Error" << endl ;
	}
}


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

Я пытался установить t и использовать t++ после каждого, но я не думаю, что сделал эту часть правильно.

Mohibur Rashid

Итак, если значение numToys[t] == 500, то он выведет ошибку?

в функции вы объявили numToys как целое число, но вы подаете в суд на это как массив, есть ваша ошибка

Member 13479017

возгласы. Спасибо, я все исправил.

1 Ответов

Рейтинг:
12

OriginalGriff

Вы объявили numtoys как int, а не массив - и вы не можете индексировать в целое число:

void elfRating (int numToys, string&rating) 
{
	int t = 0 ;
	if (numToys [t] < 200)
	{
Но решение состоит в том, чтобы передать значение индекса массива функции, а не массиву:
void elfRating (int numToys, string&rating) 
{
	if (numToys  < 200)
	{
           ...
И чтобы вызвать это из вашего основного кода:
cout << setw(10) << "Number of Toys Produced:" << numToys[ii] ;
elfRating(numToys[ii], rating);
cout << setw(20) << "Rating:" << rating ;


CPallini

5.