字符串作为C ++中while循环的标记

时间:2014-04-20 00:43:53

标签: c++ input getchar

我尝试使用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 个答案:

答案 0 :(得分:2)

正如您所说,您无法将字符串转换为bool。我建议:

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

答案 1 :(得分:1)

在这一行中(假设你错误地在那里输入了一个额外的括号):

while (str = myReadLine() != NULL)

myReadLine() != NULL之前正在评估str = myReadLine()。这就是为什么它说str无法转换为bool

str = myReadLine()周围添加一个括号,它应该可以正常工作。

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

答案 2 :(得分:0)

类字符串实例与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;
}