我目前正在C中使用自己的文件。 我找到了一个解释从文件中读取字符串的代码。 但是我很好奇这是如何机械地起作用的。
while (!feof(fPointer)){
fgets(singleLine, 150, fPointer);
puts(singleLine);
}
在循环结束时,filepointer如何知道更多行?不应该在while循环结束时增加filepointer吗?
干杯
答案 0 :(得分:4)
A(1:b*a,1) = reshape(mtimes((1:a).',ones(1,b)).',1,b*a)
A(1:b*a,2) = reshape(mtimes((1:b).',ones(1,a)),1,b*a)
对象存储有关打开文件的信息,包括“当前位置”。每次读/写操作都会将当前位置增加读取/写入的字节数。这就是为什么你可以继续在一个循环中调用FILE
(或任何其他输入函数)并获取内容,块大块。
同样,你可以多次调用fgets
(或任何其他输出函数)来产生输出,它们不会相互覆盖。
您可以使用printf
和ftell
来获取和设置当前文件位置(受某些限制,例如标准C不需要fseek
来返回文本上的实际字节偏移量文件,只是一些可以传递给ftell
的“神奇数字”(但我在实际实现中从未见过)。
(您的fseek
只指向一个fPointer
对象。您不应该增加此指针;它只会指向随机内存。)
最后,FILE
错误,因为while (!feof(fp))
查询存储在feof
对象中的“文件结束”位。它不会预测下一次读取是否会因为到达文件末尾而失败。在输入函数到达文件末尾后,“文件结束”位仅设置为true。这种循环将在文件结束后再次运行,然后处理垃圾(或从前一次迭代中过时)数据。