gpt4 book ai didi

c++ - fstream 输入负数失败

转载 作者:行者123 更新时间:2023-12-01 14:50:56 26 4
gpt4 key购买 nike

所以我尝试编写一个小程序,当我尝试从 .txt 文件输入负数时,我的程序失败了,只是在第一个负数之后输出随机数。

#include <iostream>
#include <string>
#include <fstream>
#include <cmath>

using namespace std;

struct imones{
string vardas;
int koordx;
int koordy;
};

void skaityti(int &n, int &m, imones A[]){
ifstream ivest;
ivest.open("U1.txt");
ivest >> n >> m;
for(int i=0; i<n; i++){
ivest >> A[i].vardas >> A[i].koordx >> A[i].koordy;
}
ivest.close();
}


int main()
{
imones A[50];
int n, m;
skaityti(n, m, A);
cout << A[0].vardas << " " << A[0].koordx << " " << A[0].koordy<<endl;
cout << A[1].vardas << " " << A[1].koordx << " " << A[1].koordy<<endl;
cout << A[2].vardas << " " << A[2].koordx << " " << A[2].koordy<<endl;
cout << A[3].vardas << " " << A[3].koordx << " " << A[3].koordy<<endl;
cout << A[4].vardas << " " << A[4].koordx << " " << A[4].koordy<<endl;
}

U1.txt:

5 30
Siuntuva 2 3
Auda 3 –1
Kostisa –3 –2
Linga 3 0
Austuva –2 –4

并且在输出的时候,-1和它后面的都变成了随机数。

最佳答案

在您的输入文件行中,那些 - 字符看起来只是一点太宽了,尽管它非常微妙且难以发现:

- : a regular minus sign.
– : one from your file.

这就是您的输入不起作用的原因,因为您的输入数据不符合要求的格式。这会导致 operator>> 失败,因此不会将任何有用的值加载到数组中。

虽然它不会指出失败的原因,但如果您检查 operator>> 结果,您至少会被告知问题,例如:

if (! (ivest >> A[i].vardas >> A[i].koordx >> A[i].koordy))
throw std::runtime_error("Something went wrong reading the file");

除了“米老鼠”程序(或“Janet and John”或“See Spot Run”或任何其他表示极其简单的短语)之外,您通常应该更喜欢检查可能失败的语句,看看他们是否确实失败了。即使抛出异常并退出程序也比继续使用错误数据要好。

事实证明,您使用的字符看起来像 en-dash,Unicode U+8211,而您需要的是 连字符减号U+0045。当您将文字处理文档中的内容复制并粘贴到数据文件中时,您经常会遇到这些(以及 em-dashes 和“智能引号”,这也会造成麻烦)或源代码。

关于c++ - fstream 输入负数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30014048/

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