为啥我的程序没有将字符从文件输入到二维数组中?
Posted
技术标签:
【中文标题】为啥我的程序没有将字符从文件输入到二维数组中?【英文标题】:Why isn't my program inputing chars into 2d array from file?为什么我的程序没有将字符从文件输入到二维数组中? 【发布时间】:2016-10-28 02:16:13 【问题描述】:我正在尝试将字符从文件中输入到二维数组中,但它没有将任何内容放入数组中。当我尝试将其打印出来时,我只会得到一堆看起来像这样的符号 - ╠
这是一个产生相同错误的示例:
测试文件如下所示:
g g g g g g g g g g
g g g t t t t t t g
g g g t t g t t g g
g t t g g t g g t g
g t t g g t g g t g
g t g t t g t t g g
g t t g g t g g t g
g t t g g t g g t g
g t g t t g t t g g
g g g g g g g g g g
产生相同错误的示例:
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main()
ifstream inFile;
char myArray[15][15];
inFile.open("C:\test\Ch5p_fa.asc");
int rows = 10;
int columns = 10;
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
inFile.get(myArray[i][j]);
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
cout << myArray[i][j] << ' ';
cout << endl << endl;
inFile.close();
cin.get();
【问题讨论】:
文件未打开,因为您需要转义反斜杠。"C:\\test\\Ch5p_fa.asc"
。你应该经常检查文件是否真的被打开了。
对不起,这只是一个例子——实际的程序有一个真实的文件路径
您的真实文件是否像您的示例那样在字符和换行符之间有空格?
是的,这是从实际测试文件中复制过来的
因此您的数组太小了,因为如果您不需要空格字符和换行符,则每行有 20 个字符,您必须跳过它们而不是将它们读入数组。此外,如果您没有从文件中获得任何正确的字符,请检查您的文件是否将字符保存为宽字符。
【参考方案1】:
试试这个:
int main()
ifstream inFile;
char myArray[15][15];
inFile.open("C:\\test\\Ch5p_fa.asc", std::fstream::in); // std::fstream::in allows you to read from the file.
int rows = 10;
int columns = 10;
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
inFile.get(myArray[i][j]);
inFile.get(); // Skeem unwonted char
inFile.close();
cin.get();
如果您需要空格,只需将列放大两倍即可。
【讨论】:
羞愧地低着头 对了,空格也是字符,对吧?感谢您的帮助 =)【参考方案2】:您的列要小两倍,因为它们不包含白色字符。例如,您可以编写第一个循环如下,使用isalpha 来检查您当前的字符是否是字母数字:
char tmp;
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns*2; j++)
tmp = inFile.get();
if (isalpha(tmp))
myArray[i][j/2] = tmp;
【讨论】:
【参考方案3】:inFile.get(myArray[i][j])
将读取所有字符,包括空格。请改用>>
流运算符,这将跳过空格:
if (!inFile)
return 0;
//initialize the array
memset(myArray, 0, 15 * 15);
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
if (!(inFile >> myArray[i][j]))
//break the loop
i = rows;
break;
【讨论】:
以上是关于为啥我的程序没有将字符从文件输入到二维数组中?的主要内容,如果未能解决你的问题,请参考以下文章