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

Char array outputting correctly but not actually storing right values

本文关键字:存储 数组 输出 字符 实际上      更新时间:2023-10-16

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]=‘a’。当我试图用isalpha和isdigit语句评估每个元素的字符类型时,我发现了这一点。为什么它在进入下一行之前存储了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
..