人。我正在编写这个小测试程序,将“EXAMPLE.txt”中的文本文件读入我的主程序。在输出中,我输出“*”来显示输出期间的数据是我想要将其提取出来并定位到数组中的数据。假设在这个测试程序中,我想要提取的数据是“ JY9757AC ”,“ AZ9107AC ”,“ GY9Z970C ”。但在那之后,我进行了一次试运行,当遇到输出时我遇到了这个问题。
example.txt中
ABC:JY9757AC
HDMI:AZ9107AC
SNOC:GY9Z970C
的main.cpp
main()
{
string output;
ifstream readExample;
readExample.open("EXAMPLE.txt");
while(readExample.eof())
{
getline(readExample,output,':');
cout << "* " << output <<endl;
}
}
输出
* ABC //while loop output the "ABC", which is the data that I don't want.
* JY9757AC
HDMI //it work's well, as what I expected and so and the SNOC below
* AZ9107AC
SNOC
* GY9Z970C
我不知道为什么输出上会显示“ * ABC ”,我的逻辑有什么问题。或者我错过了while循环中的内容?提前感谢您帮助解决我的代码!
答案 0 :(得分:1)
delim
的{{1}}参数替换了新行的默认分隔符,即&#34; \ n&#34;。
您目前正在以&#34;线&#34;是:
getline
你能做的更像是这样(如果你的输出像GY9Z970C那样)是固定大小的:
ABC
JY9757AC\nHDMI
AZ9107AC\nSNOC
GY9Z970C
答案 1 :(得分:0)
首先,我假设while
循环是while(!readExample.eof())
,否则根本就没有输出。
其次,对于您的问题,第一个getline(readExample,output,':');
将“ABC”读入output
,因此在下一行输出* ABC
,这正是您所获得的。毫不奇怪。
答案 2 :(得分:0)
输出存储Example.txt中的第一个提取并打印后跟*。在第二次迭代output = "ABC";
中的第一次迭代output = "JY9757AC";
中。我在while循环中添加了一个getline()
,用于读取行中不需要的部分。我还添加了一个string[]
来存储提取的值。
#include <fstream>
#include <string>
using namespace std;
int main()
{
string output, notWanted, stringArray[3];
int i = 0;
ifstream readExample;
readExample.open("EXAMPLE.txt");
while (!readExample.eof())
{
getline(readExample, notWanted, ':');
getline(readExample, output);
cout << "* " << output << endl;
stringArray[i++] = output;
}
cin.get();
return 0;
}