C ++: при передаче массива для l oop значение не печатается? - PullRequest
0 голосов
/ 13 июля 2020

Я новичок в программировании на C ++. Всякий раз, когда я запускаю это, он ничего не печатает.

Я хочу бесконечное количество раз спрашивать пользователя его имена и прерывать его только после ввода «quit». И после ввода «выйти» он должен распечатать все элементы в массиве. Но он ничего не печатает. Где я ошибаюсь?

Вот мой код:

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

int count = 0;
std::string arr[] = {};

void my_funct()
{
    for (int i = 0; i < count; i++){
        std::cout << arr[i];
    }
}

int main()
{
    std::string names;
    while (true)
    {
        std::cout << "Enter your name: \n";
        getline(std::cin, names);
        if (names == "quit")
        {
            my_funct();
            break;
        }
        else
        {
            std::string arr[] = {names};
            count++;
        }
    }
}


Ответы [ 3 ]

3 голосов
/ 13 июля 2020

arr in my_funct() и arr in if-else - это два разных массива. Вы объявляете локальную версию в if-else , которая после каждой итерации l oop уничтожается. Вы также объявили его как массив нулевой длины, то есть он не может содержать никаких элементов. В вашем случае вы хотите std::vector (вы даже включили соответствующий заголовок).

Затем вы можете отказаться от переменной count и использовать vec.size() (я переименовал arr в vec ) вместо этого.

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

std::vector<std::string> vec;

void my_funct()
{
    for (int i = 0; i < vec.size(); ++i) {
        std::cout << vec[i];
    }
}

int main()
{
    std::string name;
    while (true) {
        std::cout << "Enter your name: \n";
        getline(std::cin, name);
        if (name == "quit") {
            my_funct();
            break;
        }
        else {
            vec.push_bash(name);
        }
    }
}
1 голос
/ 13 июля 2020
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int count = 0;
vector<string> arr;

void my_funct()
{
    for (auto ar : arr) {
        std::cout << ar << endl;
    }
}

int main()
{
    std::string names;
    while (true)
    {
        std::cout << "Enter your name: \n";
        getline(std::cin, names);
        if (names == "quit")
        {
            my_funct();
            break;
        }
        arr.push_back(names);
    }
}
0 голосов
/ 13 июля 2020

Вот ваш код, который я пытался исправить. Если вы не понимаете или нуждаетесь в объяснении, просто спросите, и я постараюсь объяснить

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

int counet = 0;

vector<string> arr;

void my_funct()
{
    for (int i = 0; i < arr.size(); i++){
        cout << arr[i] << endl;
    }
}

int main()
{
    
    std::string names;
    while (true)
    {
        std::cout << "Enter your name: \n";
        getline(std::cin, names);
        
        if (names == "quit")
        {
            my_funct();
            break;
        }
        else
        {
            arr.push_back(names);
        }
    }
}
...