【问题标题】:Some methods of reading from txt files从txt文件中读取的一些方法
【发布时间】:2013-07-26 20:38:50
【问题描述】:

我正在尝试学习一些从 C++ 中读取文件的技术,我想出了这个例子。

假设下面是我要读取的txt文件的内容

A
1 2 3
4 5 6
7 8 9

B
1 2 3
4 5 6
7 8 9

所以,我在这里要做的是,如果我们读取 A,那么我们开始从下面读取矩阵 A 并将它们存储到 a[i][j] 中。对于 B 也是如此。在其他情况下,我们将它们视为例外,我们现在不在乎。

我现在的问题是混合阅读。我知道如何读取整数以及如何分别从文件中读取字符串,就像愚蠢的方式while(fin>>it)。但是谁能告诉我这种混合阅读的快速方法,我不必声明几个阅读变量(类型),如字符串和 int?

例如,我只知道如何读取整行的整数,不知道换行处理程序,这意味着我不知道如何识别我们是否到达了行尾或类似的东西:

    ifstream fin;
fin.open(infilename);
int it;
int arr[3][3];
int i=0, j=0;
while(fin>>it){
    arr[i][j]=it; 
      `\\I am confused at this place and don't know how to write the condition`
}
fin.close();

而且,既然有char和int两种类型,我是不是必须声明char? fin>>char 是如何工作的?在一行中逐个字符地读取字符或其他内容? 如果有人可以指导我,我将不胜感激!谢谢!

【问题讨论】:

  • 你能发布你的代码吗?谢谢。
  • 好的,请稍等:)

标签: c++ file-io


【解决方案1】:

您不必担心换行符,因为 >> 会跳过空格和换行符。但是,如果您想要不同的数据类型,将 fin>>it 放在 while 条件中会使事情复杂化。您可以改为读入一个字符来表示每个矩阵,然后在循环中从 fin 读取到矩阵:

char c;
int mat[3][3];

while (fin>>c){
    //save c somewhere
    fin>>mat[0][0]>>mat[0][1]>>mat[0][2];
    fin>>mat[1][0]>>....;
    fin>>mat[2][0]>>....;
    //store mat 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2016-06-15
    相关资源
    最近更新 更多