所以我现在是第二年的计算机工程专业的学生,我已经遇到了这个我目前正在注册的C ++数据结构类的大墙。我必须创建的这个程序应该从文件中读取数据,输入将数据转换为矢量并显示该文件的最小值和最大值。她还希望我使用模板,但我只是想在我走过这条路之前让这件事情发生。现在我遇到的问题是,除了我的代码中的这一点,我无法做任何事情。
现在这段代码显然是不完整的,但我似乎无法弄清楚如何将这些值读入一个向量,然后抛出作为字符串的值。说实话,我失去了酱油,因为缺乏更好的比喻,把棕色的东西扔在墙上,看看它是否粘在上面。我个别理解这些主题,但是将它们组合在一起并投入数据文件让我迷失了方向。如果有人可以花时间坐下来帮我解决这个问题,因为我的教授一周没有回复我的电子邮件(仅限在线课程),这个项目将于周二到期,我已经在最后2个工作了几天没有完成。
我非常感谢这种帮助,并且理解我即将失去它。我在Java,Diff Eq或HTML / CSS课程中没有任何问题,但是这个C ++课程绝对支配我(在C ++课程的入门中收到了B)。再次感谢,我感谢任何可以提供帮助的人!
//Nicholas Stafford
//COP2535.0M1
//Read in text file into multiple vectors and display maximum and minimum integers/strings.
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
int main() {
ifstream inputFile; //File input object
const int fSize = 6;
int numCt = 0; //Counts number of integers
vector<int> numInt(fSize);
string numWd;
//Open input file
inputFile.open("minmax.txt");
//Data validation for file
if (inputFile)
{
//Try method to remove string values
try
{
//Only pull the integer values into a vector
while (inputFile >> numInt)
{
numCt++;
}
}
catch (string noString)
{
cout << noString;
}
}
}
答案 0 :(得分:1)
你提到你有Java背景,我很遗憾地告诉你,你正在遭受Java-itis的痛苦:
try
{
//Only pull the integer values into a vector
while (inputFile >> numInt)
{
numCt++;
}
}
catch (string noString)
{
cout << noString;
}
这或多或少会在Java中如何工作:如果发生错误,Java通常会抛出异常。在这里,您试图读取int
值,并假设如果读取的下一个项不是整数,则抛出异常。
这就是它在Java中的工作方式,但这不是C ++的工作方式。
如果>>
运算符失败,C ++会将输入流设置为错误状态,并在不执行转换的情况下正常返回,使int
值保持未初始化状态。 C ++不会抛出异常。通常,C ++代码抛出的异常数量远远少于等效的Java代码。
>>
运算符时,由于没有自己的错误而不公平地经历了很多挫败感。他们的教练教他们一直使用它,但他们真的不应该。这是一本教科书的例子。
您期望>>
读取下一行文字。它没有。它从输入流中读取下一个以空格分隔的glob。如果你有
2 3
然后>>
运算符只会读取'2'而不是'3'。此外,>>
运算符处理换行符就像任何形式的空格一样。而且,正如我所提到的,由于>>
处理错误报告的方式,您必须明确检查它。
总之,您应该如何处理C ++中的每一行输入:
std::string line;
std::getline(std::cin, line);
这会读取一行文字。而已。只有在您完成该步骤后,您才可以开始使用>>
运算符,找出其中的内容:
std::istringstream parse(line);
parse >> numInt;
if (parse.fail())
{
// Conversion failed, to what you want with it.
}
干净,简单,解析失败不会影响std::cin
输入流的状态,否则您有义务在失败时重置该输入流。