为什么我的程序没有将字符从文件输入到 2D 数组中?

Why isn't my program inputing chars into 2d array from file?

本文关键字:输入 2D 数组 文件 程序 我的 字符 为什么      更新时间:2023-10-16

我试图从文件中输入字符到2d数组,但它没有将任何东西放入数组中。当我试着把它打印出来时,我只得到一堆像这样的符号——科技部

下面是一个产生相同错误的示例:

测试文件如下:

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:testCh5p_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();
}

试试这个:

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();
}
如果你需要空格,只需将列的大小增加一倍。

你的栏小了两倍,因为它们没有考虑到白色字符。您可以像下面这样编写第一个循环,例如,使用ising 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;
        }
    }
}

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;
        }
    }
}