我已经查到了每个资源的感觉,我似乎无法找到这个问题的可靠答案。也许很明显,我还是C ++的新手。
我有以下功能主要方法:
int main()
{
char firstChar, secondChar;
cin >> firstChar;
cin >> secondChar;
cout << firstChar << " " << secondChar;
system("pause"); // to wait for user input; allows the user to see what was printed before the window closes
return 0;
}
这将导致控制台等待输入。用户输入了一些东西。在这种情况下(test)
。输出是:
( t
我想改变它,以便输入来自一个文件,并且可以为每一行执行相同的方式而不是一次。
我尝试了以下几种变体:
int main(int argc, char* argv[])
{
ifstream filename(argv[0]);
string line;
char firstChar, secondChar;
while (getline(filename, line))
{
cin >> firstChar; // instead of getting a user input I want firstChar from the first line of the file.
cin >> secondChar; // Same concept here.
cout << firstChar << " " << secondChar;
}
system("pause"); // to wait for user input; allows the user to see what was printed before the window closes
return 0;
}
这仅对文件中的每一行运行while循环一次,但仍需要输入到控制台中,并且绝不操纵文件中的数据。
文件内容:
(test)
(fail)
所需的自动输出(无需用户手动输入(test) and (fail)
:
( t
( f
答案 0 :(得分:3)
最终修改
看到输入后我会做这样的事情
int main(int argc, char* argv[])
{
ifstream exprFile(argv[1]); // argv[0] is the exe, not the file ;)
string singleExpr;
while (getline(exprFile, singleExpr)) // Gets a full line from the file
{
// do something with this string now
if(singleExpr == "( test )")
{
}
else if(singleExpr == "( fail )") etc....
}
return 0;
}
您知道文件的完整输入是什么,因此您可以一次测试整个字符串而不是逐个字符。然后,只要你有这个字符串
就行动吧答案 1 :(得分:0)
流提取运算符,或'&gt;&gt;'会从流中读取,直到找到一个白色空间。 在C ++中,cin和cout分别是istream和ostream类型的流。在您的示例中,exprFile是一个istream,当文件打开时,它成功连接到您提到的文件。要从流中一次获取一个字符,您可以执行以下操作,
char paren;
paren = cin.get(); //For the cin stream.
paren = exprFile.get(); //for the exprStream stream, depending on your choice
要获取更多信息,请浏览 this
答案 2 :(得分:0)
你可以这样做:
int main(int argc, char* argv[])
{
ifstream filename(argv[0]);
string line;
char firstChar, secondChar;
while (getline(filename, line))
{
istringstream strm(line);
strm >> firstChar;
strm >> secondChar;
cout << firstChar << " " << secondChar;
}
system("pause"); // to wait for user input; allows the user to see what was printed before the window closes
return 0;
}