1

我有一个我想读入的文本文件中的名称列表,然后输出回另一个文本文件。IE:

101 Name 1
102 Name 2
103 Name 3

对于代码:

int studentID;
char name[MAX];
while (infile >> studentID)
      {
        infile.getline (name, MAX);
        outfile << left << setw(10) << studentID;
        outfile << left << setw(20) << name;
        outfile << left << setw(10) << "SKIPPED WORD";
      }

它会在文本文件的名称之后读入回车键,然后当我想输出另一个文本文件时它会转换回回车键,它看起来像这样。

101 Name 1
SKIPPED WORD
102 Name 2
SKIPPED WORD
103 Name 3
SkIPPED WORD

这就是我要的

101 Name 1 SKIPPED WORD
102 Name 2 SKIPPED WORD
103 Name 3 SKIPPED WORD

任何人都知道如何删除字符数组末尾的“输入”?

4

2 回答 2

1

有几种方法可以解决这个问题,最简单的可能是你开始使用std::getline而不是istream::getline. std::getline读取换行符,但不将其附加到字符串。

另一种解决方案是简单地检查读取字符串中的最后一个字符是否为换行符,然后将其更改为字符串终止符:

if (name[strlen(name) - 1] == '\n')
    name[strlen(name) - 1] = '\0';
于 2013-01-15T10:35:42.407 回答
1

代替istream::getline, 使用std::getline,它不会将结束换行符存储在字符串中(但会从流中删除它)。

#include <string>

int studentID;
while (infile >> studentID)
{
    std::string name;
    std::getline(infile, name);

    outfile << left << setw(10) << studentID;
    outfile << left << setw(20) << name;
    outfile << left << setw(10) << "SKIPPED WORD" << '\n';
}

这样您就不再需要 MAX 并且可以拥有任意长的名称。

于 2013-01-15T10:36:04.283 回答