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个空格元素,为什么输出看起来不正确,尽管实际上并不是这样?对我来说,这比我做的更简单,更有效吗?
提前感谢您的帮助。
答案 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
..