字符数组输出正确但实际上没有存储正确的值

时间:2016-04-16 21:32:30

标签: c++ arrays char

C ++新手,遇到了另一个障碍需要学习。尝试创建一个从文件读取的简单程序,并将字符存储到char数组中。

#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
using namespace std;

int main () 
{
  const int SIZE = 9;
  char arr[SIZE];
  char currentChar;
  int numChar = 0;
  int i = 0;

  ifstream infile ("file.txt");

  if (!infile)
  {
      cout << "Can not open the input file"
           << " This program will end."<< "\n";
      return 1;
    }

  while(infile.get(arr[i]))
      {
          i++;
          numChar ++;
      }

  for(i=0;i<numChar;i++)
  {
      cout << arr[i];
  }

  cout << "\n" << arr[1];

  return 0;
} 

file.txt的内容:

A
a
9

!

问题是:

  for(i=0;i<numChar;i++)
  {
      cout << arr[i];
  }

输出与读取的文件相同,但是当我手动检查数组元素时。 arr [1]存储一个空格并且arr [3] =&#39; a&#39;。当我试图用isalpha和isdigit语句来评估每个元素的char类型时,我发现了这一点。为什么在到达下一行之前存储2个空格元素,为什么输出看起来不正确,尽管实际上并不是这样?对我来说,这比我做的更简单,更有效吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您正在阅读的内容是文件中每个字符旁边的换行符。如果在显示字符时将字符转换为int,则会得到如下内容:

65 //ascii code for 'A' at arr[0]
10 //ascii code for new line character(\n) at arr[1]
97 //ascii code for 'a' at arr[2]
10
..