【问题标题】:how to read in file that contains char, int and white space into linked list如何将包含char,int和空格的文件读入链表
【发布时间】:2014-08-23 18:16:12
【问题描述】:

您好,当我将包含空格的文件读入链接列表时遇到问题

这是读入的文件:

19 , 11 米 4 8 b 23 q 33

这是我的代码

struct story
{
  char letter;
  int number;
  story *next;
};

int main()
{
  story *head = NULL; // list head pointer                                           
  ifstream inFile;

  char letter;
  int num;                                                           

  // read file                                                                         
  inFile.open(FILENAME.c_str());
  if(inFile.fail())
    cout << "Error..." << endl;
  while (inFile >> letter){
    cout << letter << " " ;
    inFile >> num ;
    cout << num << " ";                                                                                                  
  }
  inFile.close();
  return 0;
}

输出:a 19 , 11 m 4 8 0

程序在读取文件时跳过空格。它停止读取文件。 getline() 函数有助于阅读,但我想分别存储 char 和 int,因为这是一个链表项目。

【问题讨论】:

  • 你的问题是什么?在任何情况下,请注意您不验证num 是否已成功读取:您可能最好使用while (inFile &gt;&gt; letter &gt;&gt; num) { ... }。如果要禁用跳过空格,可以使用inFile &gt;&gt; std::noskipws,然后根据需要使用inFile &gt;&gt; std::ws 跳过空格。
  • 此外,您的文件不遵循您用来从中读取的模式(char 然后是 int 的迭代)。 a 19 , 11 m 4 8 b 23 q 33 应读作 char, int, char, int, char, int, int, char, int, char, int.
  • 你需要考虑分号,跳过它。
  • @DietmarKühl :我试图做 while(inFile>>noskipws>>letter>>num){...} 它什么也没读
  • @user3923936:这并不奇怪!如果您不希望输入运算符跳过前导空格,则需要自己做。也就是说,表达式将读取一个字母但读取一个数字失败,因为看到的下一个字符是空格!你抱怨空格会被自动跳过,我告诉你如何禁用它(有关详细信息,我确信你查阅了有关 std::noskipws 所做操作的手册)。你也没有澄清你的问题是什么。当然,在您的序列中,您不会在某事和整数之间交替:b 将被读取为 int,这将失败。

标签: c++ list file-io linked-list


【解决方案1】:

文件应该是二进制的:

outFile.open(FILENAME.c_str(), ios::out | ios::binary);

inFile.open(FILENAME.c_str(), ios::in | ios::binary);

您应该读取/写入至少 5 个字节的记录,具体取决于对齐方式。 读/写整个结构很容易。

阅读:

story *s=new story;
inFile.read(s,sizeof(s));
s->next=NULL;

使用write 写入文件。

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2014-10-08
    • 1970-01-01
    相关资源
    最近更新 更多