Строка как часовой в цикле while в C++

Я попытался сделать функцию, которая читает короткие строки из стандартного ввода, используя 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() функционировать? Это нормально?

3 ответа

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

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

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

while (str = myReadLine() != NULL)

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

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

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

Сравнение экземпляра строки класса с 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;
}
Другие вопросы по тегам