我尝试使用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 :(得分: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;
}