gpt4 book ai didi

C++ peek() 看不到换行符

转载 作者:行者123 更新时间:2023-11-30 04:19:09 26 4
gpt4 key购买 nike

我在从文件中读取输入时遇到了一些问题,我真的不应该在家庭作业中遇到这些问题。我在之前的上一次分配中使用了非常相似的代码(唯一改变的是值被插入的地方)。我得到了一个包含以下输入的文本文件:

10
3 6 4 9 0 7 8
8 5 3 7 3 4 -2
5 10 2 8 1 4 1
2 6 -3 1 3 7 1
1 10 -1 2 2 4 -2
10 9 -3 1 3 7 2 5 1
7 3 0 10 1 2 1 8 2
9 6 6 3 4 10 7
4 8 5 1 9 5 6
6 2 4 3 0 9 0

第一行是上图的顶点数。在后面的每一行中,第一个数字是它用于哪个顶点,下一个数字是它连接到哪个顶点,后面的一个是该边的权重。该行重复 vertex, weight 直到行尾(即,第一行是顶点 3,它有一条到 6 的边,权重为 4,一条边到 9,权重为 0,等等)。我使用一维 vector 来表示使用行主要表示法的矩阵。我遇到的问题是我的行变量似乎根本没有更新。目前,我从实际将数据插入 vector 的 while 循环的最后一行得到以下输出。

3:  6: 4
3: 9: 0
3: 7: 8
3: 8: 5
3: 3: 7
3: 3: 4
3: -2: 5
3: 10: 2
3: 8: 1
3: 4: 1
3: 2: 6
3: -3: 1
3: 3: 7
3: 1: 1
3: 10: -1
3: 2: 2
3: 4: -2
3: 10: 9
3: -3: 1
3: 3: 7
3: 2: 5
3: 1: 7
3: 3: 0
3: 10: 1
3: 2: 1
3: 8: 2
3: 9: 6
3: 6: 3
3: 4: 10
3: 7: 4
3: 8: 5
3: 1: 9
3: 5: 6
3: 6: 2
3: 4: 3
3: 0: 9
3: 0: 9

我的行变量似乎卡在 3 上,就像 input.peek() 一样,因为 while 循环的条件永远不会看到换行符。真正令人困惑的部分是,在类似的任务中,这段代码可以很好地遍历输入文件并将内容填充到它们应该去的地方。我很难过,所以如果有人能指出我正确的方向,我将非常感激。如果我过于冗长,我提前道歉。

我的代码如下。

if(input.is_open()) // making sure the input is open
{
input >> nodeCount; //Grabbing the number of nodes from the first value of the file

for(int i = 1; i < nodeCount*nodeCount; i++)
{
edgeList.push_back(graphNode());
edgeList[i].value = infinity;
edgeList[i].isInfinity = true;
edgeList[i].pred = -1;
}

//Putting data from the file into the vector array
while(!input.eof())
{
input >> row; //For each cycle through the list, we grab the first number on the line to get which x value (start vertex) we're working with
while(input.peek() != '\n' && !input.eof())
{
input >> col;
input >> edgeList[((row-1)*nodeCount)+(col-1)].value;
edgeList[((row-1)*nodeCount)+(col-1)].isInfinity = false;
edgeList[((row-1)*nodeCount)+(col-1)].pred = row;
cout << row << ": " << " " << col << ": " << edgeList[((row-1)*nodeCount)+(col-1)].value << endl;
}

}
input.close(); //Closing our input file since we don't need it anymore
}

最佳答案

通过查看您吐出的数字,很明显此条件在文件末尾之前永远不会计算为 false:

input.peek() != '\n' && !input.eof()

我的问题是 - 您使用的是 Windows 风格、Unix 风格还是 Mac 风格的行结尾?是否有更好的方法来确定行的结束位置而不依赖于假设它们采用特定的 ASCII 值?

关于C++ peek() 看不到换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16028775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com