Объявить >> и <<, как дружественные функции

91
12 ноября 2019, 19:30

:)

Возникла проблема "Бесконечный ввод", то есть вызывается консоль, но, видимо, что-то циклится После нажатия клавиши Enter курсор переводся на следующую строку, ввод не прекращается

Помогите, пожалуйста Не могу понять, в чем проблема Спасибо! :D

#include<iostream>
using namespace std;
class st {
private:
char stroka[10000];
public:
friend istream &operator >> (istream &input, st&d) {
    int i = 0;
    for (int i = 0; i < 10000; i++) {
        if (d.stroka[i] != '\0') {
            input >> d.stroka[i];
        }
    }
    return input;
}
friend ostream &operator << (ostream &output, const st&d) {
    for (int i = 0; i < 10000; i++) {
        if (d.stroka[i] != '\0') {
            output << d.stroka[i] << "  ";
        }
    }
    return output;
}
};
int main() {
st a;
cin >> a;
cout << a;
system("pause");
return 0;
}
Answer 1

Непонятно, что вы хотите сказать, например, этим:

if (d.stroka[i] != '\0') {

Попробуйте - это случайно не то, что вы хотите?

class st {
private:
    char stroka[10000];
public:
    friend istream &operator >> (istream &input, st&d)
    {
        return input.getline(d.stroka,10000);
    }
    friend ostream &operator << (ostream &output, const st&d)
    {
        return output << d.stroka;
    }
};
Answer 2

Можно использовать input.getline как вариант

#include<iostream>
using namespace std;
class st {
private:
    char stroka[10000];
public:
    friend istream &operator >> (istream &input, st&d) {
        int i = 0;
        input.getline(d.stroka, 10000);
        return input;
    }
    friend ostream &operator << (ostream &output, const st&d) {
        for (int i = 0; i < strlen(d.stroka); i++) {
                output << d.stroka[i] << "  ";
        }
        return output;
    }
};
int main() {
    st a;
    cin >> a;
    cout << a;
    system("pause");
    return 0;
}
READ ALSO
namespace и агрументы функции

namespace и агрументы функции

Допустим у меня есть функтор и некий класс определенные в namespace

94
Большое O для вставки в коллекцию

Большое O для вставки в коллекцию

Как посчитать большое О для вставки в коллекцию?

74
Почему имена в шаблонах необязательны?

Почему имена в шаблонах необязательны?

Смотрю описание шаблонов и заметил, что имена параметров везде помечены как необязательные, но ведь если имя отсутствует, то параметр внутри...

82
Сравнение двух строк, одна с пробелом

Сравнение двух строк, одна с пробелом

У меня есть функция поиска, но при сравнивании строки с помощью этой функции, strcmp(mas[ii]street,pt), и тут возникла проблема, строка которую ввожу,...

113