我正面临一个非常奇怪的问题。我正在尝试从文件中读取输入,然后使用正则表达式查找并在屏幕上打印出结果。 我的文件包含购物车和产品名称。该文件有数千行,因此下面是该文件的快速示例:
Cart561
219328518230,0B6060D038C0,819303200230,81E068407C08,A44323118230,A44488643848,8484C2D09A40,A1460324CA40,
Cart210
834248C52248,8490CB1068C0,
Cart2460B41A124C218,06C1A12528C0,864249906620,2344B20C4230,291329103218,8490CB1068C0,2370231180B0,294621306230
... (More below)
当我尝试仅读取和打印出前5或10个购物车时,我的代码可以正常运行。 但是,当我尝试读取并打印所有购物车和名称时,由于某种原因,它不是从头开始的。相反,它跳到文件的中间并在那里开始处理。
这是我的代码:
#include <iostream>
#include <regex>
#include <fstream>
using namespace std;
int main()
{
ifstream cart("Carts.csv");
regex h("[0-9A-Z]{12}");
smatch n;
int count = 0;
while (getline(cart, line))
{
// If count is an even number, the compiler will print out the cart's name
if (count % 2 == 0)
cout << line << endl;
while (regex_search(line, n, h))
{
for (auto x : n)
cout << x << endl;
line = n.suffix().str();
}
count++;
cout << count << endl; // This one just for my test
}
如果我将其添加到while循环中,以使其仅打印出5个第一结果:
if(count==5) {break;}
代码运行正常。但是,如果我删除了该代码,并让编译器读取并打印了整个文件,则它不会打印文件的前半部分,它会像这样从无处开始:
A444B0246A40
2305A3109818
24E060D06260
819302D48860
29460A4528C0
09C24A503260
0B3058819260
8484E910C890
234260C19260
60C629016890
8910C98C18C0
0B60492000B0
234270246848
864482718C80
06C260C43260
2344B0306620
A44322548890
42 -> This is number of line in file
Cart277
43 -> This is number of line in file
A44482C16848
294482D090B0
2652230C4A40
0CC629112830
896408C168C0
06C1A12528C0
86424864C248
864248D0C620
E0424B058218
2910F0342230
2C10E2446230
2490F0318620
A441A244C230
8490CB1068C0
0B6060D038C0
A44242616848
0B44898438C0
81C4A1843830
234270246848
8484C2D09A40
44 -> This is number of line in file
Cart287
45 -> This is number of line in file
... (More below)
经过测试,我意识到它会以某种方式忽略我的前41行。该计数仍从开始算起,但编译器仅从第42行的中间打印出结果。 (如果您想知道,文件中总共有1994行)
简而言之,我仍然不知道我的问题到底是什么,现在我应该怎么做才能解决此问题。你有什么建议吗?非常感谢您能向我解释为什么会发生这种情况。
P / s:由于这是我作业的一部分,因此我必须使用正则表达式。
编辑:我将结果打印在文本文件中,并显示所有行。但是我仍然需要它在编译器上也能正常工作,因为这是我的讲师要看的。