Member 14564972 Ответов: 1

Как мне исправить эту ошибку?


#include<iostream>
#include<string>
#include<vector>
using namespace std;

const int CHARBOARDROWS = 7;
const int CHARBOARDCOLS = 5;

struct Input
{
    string userInput;
    int x;
    int y;
    int choice;
    int timeStep;
    int speed;
    int length;
};

Input info;

void displayBoard();
Input inputProcess();
void displayA(vector<vector<char>> , int , int);
void displayB(vector<vector<char>> , int , int);
void displayC(vector<vector<char>> , int , int);
void displayD(vector<vector<char>> , int , int);
void displayE(vector<vector<char>> , int , int);
void displayF(vector<vector<char>> , int , int);
void displayG(vector<vector<char>> , int , int);
void displayH(vector<vector<char>> , int , int);

int main()
{
    vector<vector<char>> letterA;
    letterA.resize(CHARBOARDROWS, vector<char>(CHARBOARDCOLS));
    vector<vector<char>> letterB;
    letterB.resize(CHARBOARDROWS, vector<char>(CHARBOARDCOLS));
    vector<vector<char>> letterC;
    letterC.resize(CHARBOARDROWS, vector<char>(CHARBOARDCOLS));
    vector<vector<char>> letterD;
    letterD.resize(CHARBOARDROWS, vector<char>(CHARBOARDCOLS));
    vector<vector<char>> letterE;
    letterE.resize(CHARBOARDROWS, vector<char>(CHARBOARDCOLS));
    vector<vector<char>> letterF;
    letterF.resize(CHARBOARDROWS, vector<char>(CHARBOARDCOLS));
    vector<vector<char>> letterG;
    letterG.resize(CHARBOARDROWS, vector<char>(CHARBOARDCOLS));
    vector<vector<char>> letterH;
    letterH.resize(CHARBOARDROWS, vector<char>(CHARBOARDCOLS));

    inputProcess();


    // TODO : USE WHILE OR IF TO APPLY IN CHOICES


    displayBoard();
    displayA(letterA,CHARBOARDROWS,CHARBOARDCOLS);

    return 0;
}

void displayBoard()
{
    vector<vector<char>>A;
    int numOfRows = 20;
    int numOfCols = 40;
    //if (!((info.y)>numOfRows) || !((info.x)>numOfCols))
    for (int i=0;i<info.length;i++)
    {
        if (info.userInput[i]=='A')
        {
            displayA(A,CHARBOARDROWS,CHARBOARDCOLS);
        }

    }
    for (int row=0;row<numOfRows;row++)
    {
        for (int column=0;column<numOfCols;column++)
        {
                cout<<'*';
        }
        cout<<"\n";
    }
}

Input inputProcess()
{
    //Input info;

    cout<<"Please input a string (can up to 25 character long) :\n";
    getline(cin,info.userInput);
    cout<<"\n*********************************************";
    cout<<"\nAnchor dot is the top left dot of the string.";
    cout<<"\n*********************************************";
    cout<<"\n\nPlease input coordinate x of anchor dot : \n";
    cin>>info.x;
    cout<<"\nPlease input coordinate y of anchor dot :\n";
    cin>>info.y;
    cout<<"\nPlease choose to display the string :";
    cout<<"\n1-scrolling from left to right";
    cout<<"\n2-scrolling from right to left";
    cout<<"\n3-scrolling upwards";
    cout<<"\n4-scrolling downwards";
    cout<<"\n5-stationary without scrolling\n\n"<<"INPUT :";
    cin>>info.choice;
    cout<<"\n*********************************************";
    cout<<"\nOne time step is one refresh cycle which is\n"
        <<"made up of a screen clearing process and a\n"
        <<"display process.";
    cout<<"\n*********************************************";
    cout<<"\n\nPlease input number of time steps :\n";
    cin>>info.timeStep;
    cout<<"\nPlease input speed (between 1 to 10) :\n";
    cout<<"1-the slowest\t 10-the fastest\n";
    cin>>info.speed;
    info.length = info.userInput.length();
    displayBoard();
}

void displayA(vector<vector<char>> A, int row, int column)
{
    A[0][2] = '#';
    A[1][1] = '#';
    A[1][3] = '#';
    A[2][0] = '#';
    A[2][4] = '#';
    A[3][0] = '#';
    A[3][4] = '#';
    A[4][0] = '#';
    A[4][1] = '#';
    A[4][2] = '#';
    A[4][3] = '#';
    A[4][4] = '#';
    A[5][0] = '#';
    A[5][4] = '#';
    A[6][0] = '#';
    A[6][4] = '#';
    for (auto val:A[0])
        cout<<val[0][val];
}

}


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

1.Линии
cout<<val[0][val];
показывает ошибку, что недопустимые типы [char][int] для индекса массива.Как исправить эту ошибку.
2. или если есть другой способ печати вектора, кроме метода, который я использовал.

1 Ответов

Рейтинг:
1

Richard MacCutchan

for (auto val:A[0])
    cout<<val[0][val];

Вы заявляете: val как итератор в массив A[0] который содержит подмассив. В этом случае итератор нельзя использовать в качестве индекса в подмассиве. Ваш код должен (возможно) быть таким ...
for (auto val:A[0])
    cout << val; // val refers to each subitem in the array A[0]

.. в зависимости от того, чего вы пытаетесь достичь.

Однако код кажется слишком сложным, и до сих пор не ясно, что вы пытаетесь сделать, как уже упоминалось в вашем предыдущем вопросе: https://www.codeproject.com/Questions/5165240/How-to-solve-the-problems[^]


Member 14564972

Основываясь на моем предыдущем коде, я действительно хочу отобразить символ A, который я объявил с помощью 2D-вектора в функции displayA(). Для этого цикла for я действительно хочу вывести символ A при вызове функции.Но у меня есть проблема с доступом к нему.

Richard MacCutchan

Какая проблема? Пожалуйста, дайте четкое и подробное объяснение того, какой результат вы ожидаете и что вы на самом деле видите. Выражение "На самом деле я хочу показать характер а" не дает понять, что вы пытаетесь сделать, так как A-это не символ, а вектор векторов.

Richard MacCutchan

Я построил ваш проект (после исправления различных ошибок) и протестировал его, хотя мне пришлось угадывать ответы на вопросы. Все, что я вижу, - это несколько строк звездочек, за которыми следует строка, содержащая один символ#, таким образом:

Please input a string (can up to 25 character long) :
abcdefghij

*********************************************
Anchor dot is the top left dot of the string.
*********************************************

Please input coordinate x of anchor dot :
1

Please input coordinate y of anchor dot :
1

Please choose to display the string :
1-scrolling from left to right
2-scrolling from right to left
3-scrolling upwards
4-scrolling downwards
5-stationary without scrolling

INPUT :1

*********************************************
One time step is one refresh cycle which is
made up of a screen clearing process and a
display process.
*********************************************

Please input number of time steps :
11

Please input speed (between 1 to 10) :
1-the slowest 10-the fastest
1
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
****************************************
#

Member 14564972

Я хочу отобразить символ A, когда пользователь вводит A в эту плату дисплея, на которой выполняется код.
Когда пользователь вводит ABCD, на дисплее платы будет отображаться ABCD.
экс:
**#*******
*#*#******
#***#*****
#***#*****
#####*****
#***#*****
#***#*****
#***#*****

Richard MacCutchan

Прекратите то, что вы делаете, и оставьте этот проект в покое. Это слишком сложно, и некоторые части кода на самом деле не делают ничего полезного. Начните новый проект, который просто напечатает букву узором. Как только вы это сделаете, вы, возможно, сможете добавить еще несколько букв. Как только у вас будут работать другие письма, вы можете подумать о том, какие еще вещи вы хотите, чтобы ваше приложение делало.

Начните с малого и продвигайтесь к большому, а не наоборот.

Member 14564972

Отмеченный.Но нужно ли мне начинать с рабочей буквы а, используя 2D-вектор или 2Darray? Позже мне нужно будет объединить их вместе,когда пользователь введет ABCD.

Richard MacCutchan

Просто начните с простого массива, вашего vector<vector<char>> тип просто усложняет ситуацию.

Member 14564972

окей. После того, как я попробую, он может успешно работать, но у меня есть проблемы с их печатью вместе с координатами, введенными пользователем.
Экс:
координата x : 2
координата y : 1

когда пользователь вводит AB.

Richard MacCutchan

Что означают эти цифры?

Member 14564972

Можете ли вы увидеть заглавную букву А?