input — строка в качестве часового в цикле while в переполнении стека

Я попытался сделать функцию, которая читает короткие строки из стандартного ввода, используя getchar(), Функция работает очень хорошо сама по себе, но когда я использую ее как часть часового в цикле while, я всегда получаю сообщение об ошибке, которое, вкратце, говорит о том, что она не может преобразовать строку в bool.

#include <iostream>
#include <stdio.h>
using namespace std;
string myReadLine();
int main()
{
string str = "";
while ((str = myReadLine()) != NULL) { //eof, and any expression of that sort

cout << str << endl;

}
return 0;
}string myReadLine() {
string line =  "";
char singleSign;

while ((singleSign=getchar()) != '\n') {
line = line + singleSign;

}
return line;
}

Что я делаю неправильно? Я буду признателен за любую помощь от вас!

Вопрос 2:
Что вы думаете об эффективности myReadLine() функционировать? Это нормально?

0

Решение

Как вы говорите, вы не можете конвертировать строку в bool. Я предлагаю:

str = myReadLine();
while (!str.empty())
{
cout << str << endl;
str = myReadLine();
}
2

Другие решения

В этой строке (если вы неправильно ввели дополнительные круглые скобки):

while (str = myReadLine() != NULL)

myReadLine() != NULL оценивается раньше str = myReadLine(), Вот почему это говорит str не может быть преобразован в bool,

поставить круглые скобки вокруг str = myReadLine() и это должно работать.

while (str = myReadLine()) != NULL)
1

Сравнение экземпляра строки класса с NULL некорректно. Вы можете сделать это с помощью указателей.

Это следующий лучший способ сделать это:

#include <iostream>
#include <stdio.h>
using namespace std;
bool myReadLine(string& line);
int main()
{
string str = "";
while (myReadLine(str)){

cout << str << endl;

}
return 0;
}bool myReadLine(string& line) {
char singleSign;
line = "";

while ((singleSign=getchar()) != '\n') {
line = line + singleSign;

}
return line == "" ? false : true;
}
0