为啥我的程序没有将字符从文件输入到二维数组中?

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]) 将读取所有字符,包括空格。请改用&gt;&gt; 流运算符,这将跳过空格:

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;
        
    

【讨论】:

以上是关于为啥我的程序没有将字符从文件输入到二维数组中?的主要内容,如果未能解决你的问题,请参考以下文章

JNI维数组:将二维数组从java传递给c

将二维字符串数组保存在 .text 文件中并从中加载

指向动态二维字符数组的三重指针的内存分配

在二维数组中输入和存储字符串

如何从文本文件创建二维数组并在 c 中打印到新文件

为啥js二维数组传给后台接收到的数据变成了字符串