- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个 C++ 控制台应用程序。在用 size(int) rowSize 和 columnSize 创建了一个 Matrix 之后,我想将文本文件中的字母写入矩阵,但是 while 循环永远不会运行,因为 reader 的位置是 -1,我不能把它带到 0。有什么想法吗?
void writeText2Vec(ifstream & reader, tmatrix<char> & table){
string s;
int length, row = 0, column = 0; //beginning: column and
//row ids are set to 0.
reader.seekg(0); //reset the pointer to start
cout << reader.tellg(); // it results in -1.
while (getline(reader,s)){
//for each line while loop occurs.
length = s.length();
for(column = 0; column < length; column++)
{
table[row][column] = s.at(column);
//writing the letter to matrix.
}
row++;
}
bool openFile(ifstream & reader, string filename){
reader.open(filename.c_str());
if (reader.fail()){
exit("File cannot be found.");
return false;
}
else {
return true;
}
}
bool check(ifstream & reader, int & rowSize, int & columnSize){
//checks for valid characters, if they are
//alphabetical or not and for the length.
string s;
int len = 0, max = 0;
while (getline(reader,s)){
//runs for every line.
rowSize++; //calculation of row size
while (len < s.length()){
if (!(isalpha(s.at(len)))){
// Check to see if all characters are alphabetic.
exit("Matrix contains invalid characters!");
return false;
}
len++;
}
if (max == 0){
//if max is not set.
max = len;
len = 0;
}
else if (!(max == len)){
//if they are different, then appropriate
//error message is returned.
exit("Matrix is not in a correct format!");
return false;
}
else {
//else it resets.
len = 0;
}
}
rowSize -= 1;
columnSize = s.length(); //the last length is equal to column size
return true;
}
最佳答案
tellg()
在出现错误时返回 -1
。流是调用函数时可能处于错误状态。如果你读过到最后一次,然后有一个失败的输入,并且流是处于错误状态,必须在任何其他操作起作用之前将其清除:reader.clear()
。
关于c++ - seekg 和 tellg 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9587433/
我正在尝试制作一个随机名称生成器。问题是为了获得文件中的行数,我必须遍历它。 所以当我需要在 getRandomName() 中再次循环获取名称时,它已经到达文件末尾 我尝试使用 seekg(0, s
我有一个文本文件: 1 2 3 4 5 6 7 8 9 我想用seekg()读取一个特定的数字 ifstream fr("duomenys.txt"); fr.seekg(2,ios::beg); i
在下面的代码中,我计算了字数、行数,然后计算了文本文件的大小。第一次使用 seekg 在第一个 while 循环后工作正常,但在第二个 while 循环后,它不起作用。它给出输出中所示的值。 #inc
我有一个非常大的 (950GB) 二进制文件,我在其中存储了 10 亿个 float 序列。 我拥有的长度为 3 的文件类型的一个小例子可能是: -3.456 -2.981 1.244 2.453 1
我有一个 2884765579 字节的文件。这是用这个函数双重检查的,它返回那个数字: size_t GetSize() { const size_t current_position
#include #include int main() { std::string str; char magic[9]; std
我有一个小程序,旨在从文件中复制一个小短语,但似乎我对 seekg() 的工作方式有误,或者我的代码阻止函数按预期工作。 文本文件包含: //Intro previouslyNoted=false 这
我有一个函数(遗留)读取文件的前几行以确定其类型,然后关闭并重新打开文件,以便它可以使用正确的解释器重新读取整个文件。要点是: void readFile(const char *filename)
我正在使用 Visual C++ 2010 开发 MFC 应用程序 我正在读取一个文件的数据,但似乎 seekg 不工作 这是我的代码 //Transaction is a class i have
所以我尝试使用 cin.get() 两次读入一串字符。输入被重定向为“程序 int main() { std::cin.seekg(1, std::ios::beg); if (std::ci
在对文件使用 seekg 和 tellg 的场景中,我想知道幕后发生了什么? // Open file and get file size int myFileSize; st
在尝试以文本模式 (Windows) 读取一个简单的 ANSI 编码文本文件时,我遇到了 seekg() 和 tellg() 的一些奇怪行为;任何时候我尝试使用 tellg(),保存它的值(作为 po
我正在尝试编写一些简单的代码来读取文本文件,但会读取第一行两次。我认为这会像这样简单 std::ifstream file; file.open("filename", std::io
所以,我很好奇,因为我一直在使用这种相当有用的方法来获取文件的大小,但有些事情困扰着我。将流锁定到文件系统上的文件和 fileStream.seekg(0, std::ios::beg); int b
我正在玩 ifstream 以熟悉它。我正在尝试使用 seekg 来判断文件的位置,但它给了我错误的结果。 想法是: 打开文件 打印文件位置 从文件中读取一个字符 打印文件位置 从文件中读取一个字符
下面的程序应该输出如下内容: Begin found space found End found 但事实并非如此。 #include #include #include #include #i
我正在尝试备份 ifstream 中的一行。 file.tellg() 正在返回一个我没有预料到的值。在下面的示例中,在读取第一行(长度为 15 个字符的字符串)后,我希望 file.tellg()
我正在尝试从特定偏移量读取二进制数据。 我是这样写数据的: long RecordIO::writeRecord(Data *record) { this->openWrite();
代码如下: #include #include #include using namespace std; int main(int argc, char *argv[]) { string
我正在尝试将 bmp 文件读入字符缓冲区,并使用进程间通信将其传输到进程间。我使用以下代码完成了此操作: std::ifstream ImageFile; char* str=ne
我是一名优秀的程序员,十分优秀!