提问人:malscode 提问时间:5/6/2022 最后编辑:malscode 更新时间:5/6/2022 访问量:451
如何从文件中获取字符并显示在控制台上?
How to get characters from a file and display on console?
问:
我从有关文件处理的注释中得到了此代码。根据我对这段代码的理解,我想使用这段代码获取字符,直到到达文件中的 x。为什么我只得到第一个字符?如果此代码不正确,我应该如何更改代码以获取字符,直到达到 x?请帮助我理解这一点<
#include<iostream>
#include<fstream>
#include<string.h>
#include<string>
using namespace std;
int main()
{
char a = '-';
do
{
ifstream obj("test.txt", ifstream::in);// in would mean import from txt to ram
// cout << obj << endl;
if (obj.good() && a != obj.peek())
{
a = obj.getline();
cout << a << endl;
}
obj.close();
} while (a != 'x');
return 0;
}
答:
1赞
The Coding Fox
5/6/2022
#1
a
是一个字符,并返回一个 .这里不是有什么问题吗?你不能将 an 赋给 ,所以代码甚至无法编译。std::getline()
istream
istream
char
您可以将代码简化为以下工作示例:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream obj("test.txt", ifstream::in);
if (obj.good())
{
std::string line;
while (std::getline(obj, line))
{
for (auto& i : line)
{
if (i == 'x') return 0;
cout << i << endl;
}
}
}
obj.close();
return 0;
}
测试 .txt:
This is
a
test fixle
输出:
T
h
i
s
i
s
a
t
e
s
t
f
i
评论
0赞
malscode
5/6/2022
为什么 This 后面有空格,而不是 is、a 和 test 后面?
1赞
The Coding Fox
5/6/2022
因为文件中它们之间没有空格。 在一行中,在另一行中。This is
test
2赞
ChrisMM
5/6/2022
#2
obj.getline()
无效。我在你的评论中看到你打算写,所以我会坚持使用它。obj.get()
主要问题是您在循环中打开和关闭文件,这意味着,对于每次迭代,您将打开文件,读取一个字符,然后关闭文件。每次打开文件时,您实际上都是从头开始的,因此您不会阅读,直到您到达一个字符,但基本上是无限的。do-while
'x'
我没有测试这个,但这似乎是你想要的(评论添加):
#include<iostream>
#include<fstream>
#include<string>
int main()
{
std::ifstream obj("test.txt"); // open the file (no need to specify "in")
if ( !obj ) { // check to see if the file could be opened
std::cout << "Could not open file\n";
} else {
char a;
while ( obj >> a ) { // while there's still something to read
if ( a != 'x' ) { // if it's not an 'x' character, print it
std::cout << a << std::endl;
} else {
break; // otherwise, break the loop
}
}
obj.close(); // close the file
}
return 0;
}
评论
0赞
malscode
5/6/2022
if(!obj) 与 if(obj.is_open()) 相同
1赞
ChrisMM
5/6/2022
或多或少,是的。 检查流中是否有任何错误,而不仅仅是检查它是否打开。在这种情况下,它与 though 相同。您可以在此处找到更多信息if ( !obj )
obj.is_open()
0赞
malscode
5/6/2022
哦,这是有道理的!非常感谢所有的帮助!
上一个:如何获取递归函数中的下一行
下一个:显示整个文件
评论
a
是一个 ,它只能容纳一个字符。此外,在循环的每次迭代中打开和关闭文件,这意味着每次都从头开始读取文件。另外,你的代码甚至不会编译,所以我不知道你从哪里得到这个,或者你是如何尝试使用它的......char