Добавление условий в условный оператор - PullRequest
0 голосов
/ 09 декабря 2018

Я возиться с динамическими массивами для определенного пользователем количества входов для and и gate.

Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, сколько входов собирается протестировать пользовательи мне нужно иметь возможность использовать оператор if-else, который проверяет каждый ввод.

#include <iostream>
#include <iomanip>
#include <string> 

using namespace std;

class logic_gate {
public:
    int x = 0;

};

int main() {

int userInput = 0;

cout << "How many inputs do you want on your and gate?: ";
cin >> userInput;
cout << endl;

logic_gate *and_gate = new logic_gate[userInput];

cout << endl << "Please enter the values of each bit below . . ." << endl << 
endl;

int userTest1 = 0;


for (int i = 0; i < userInput; i++) {

    cout << "#" << i + 1 << ": ";
    cin >> userTest1;
    and_gate[i].x = userTest1;

}

return 0;
}

Вот код, для которого я сейчас пытаюсь найти решение.

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Используйте векторную структуру данных, вам не нужно указывать ее размер при объявлении, в отличие от массива, и он может увеличиваться автоматически.
Чтобы прочитать ввод до его поступления, поместите cin внутрь, пока выполняется условие цикла.Я использовал getline, чтобы прочитать всю строку и поработать с ней, чтобы всякий раз, когда пользователь нажимал кнопку ввода в пустой строке, программа думала, что ввод больше не поступал, и начинала вычислять «И» входов.

//don't forget to import vector
#include <iostream>
#include <vector>  
#include <string>
using namespace std;

class logic_gate {
public:
    int x = 0;
    logic_gate(){        //default constructor
    }
    logic_gate(int k){  //another constructor needed
        x = k;
    }
};

int main(){

    cout << endl << "Please enter the values of each bit below . . ." << endl;
    vector<logic_gate> and_gate;  //no need to tell size while declaration

    string b;
    while(getline(cin, b)){ //read whole line from standard input
        if (b == "\0")      //input is NULL
            break;
        and_gate.push_back(logic_gate(stoi(b))); //to convert string to integer
    }

    if (!and_gate.empty()){
        int output = and_gate[0].x;
        for (int i = 1; i < and_gate.size(); i++){
            output = output & and_gate[i].x;
        }       
        cout << "And of inputs is: " << output << endl;
    }
    else{
        cout << "No input was given!\n";
    }
    return 0;
}

Не стесняйтесь спрашивать, если некоторые сомнения остаются

0 голосов
/ 11 декабря 2018

Я понял, что я хотел сделать.Спасибо всем, кто помог, и особенно Полу Сандерсу.Ниже мой окончательный код.

#include <iostream>

using namespace std;

class logic_gate {
public:
    int x = 0;
};

int main() {

int userInput;
int output = 1;

cout << "How many inputs do you want on your and gate?: ";
cin >> userInput;
cout << endl;

logic_gate *and_gate = new logic_gate[userInput];

cout << endl << "Please enter the values of each bit below . . ." << endl << 
endl;

int userTest1;

for (int i = 0; i < userInput; i++) {

    cout << "#" << i + 1 << ": ";
    cin >> userTest1;
    and_gate[i].x = userTest1;

}
if (userInput == 1) {
    output = userTest1;

    cout << "The test of " << userTest1 << " is " << output << endl << endl;

}
else if (userInput > 1) {

    for (int i = 0; i < userInput; i++) {

    if (!and_gate[i].x)
    {
        output = 0;
        break;
    }

}

cout << "The test of ";

for (int i = 0; i < userInput; i++) {

    cout << and_gate[i].x;

}

cout << " is " << output << endl << endl;

}

return 0;
}
0 голосов
/ 10 декабря 2018

Для реализации логического элемента И с входами n вы можете просто сделать:

int output = 1;
for (int i = 0; i < n; ++i)
{
    if (!and_gate [i])
    {
        output = 0;
        break;
    }
}

// ...
...