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