首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么这个c编程会产生需要的结果?

为什么这个c编程会产生需要的结果?
EN

Stack Overflow用户
提问于 2019-06-03 08:53:29
回答 1查看 0关注 0票数 0

我创建了一个文件B12,其中包含一些字符,我想将该文件存储在2d数组中而不是打印它,但我的代码没有给我正确的输出。

我尝试使用此代码,但它无法帮助我

代码语言:javascript
复制
     #include<stdio.h>
     #include<stdlib.h>
     int main()
     {
        char ar[9][9];
        int i,j;
        FILE *fp;
        fp=fopen("B12.txt","r");
        if(fp==NULL)
           printf("File not Found");

        for(i=0; i<9; i++)
     {
            for(j=0; j<9; j++)
           {

                 fscanf(fp," %c",&ar[i][j]);
           }
     }
        for(i=0; i<9; i++)
     {
            for(j=0; j<8; j++)
        {
                 printf("%c",ar[i][j]);
        }
            printf("\n");
      }



      return 0;
     }

上面代码的输出是,

代码语言:javascript
复制
applemas
obnanaoa
qamalikg
rlpoppqf
elpaaprv
langolne
oagtqamv
okgqplpm
cwfaalpa

但该文件包含我需要打印的以下字符,

代码语言:javascript
复制
applemasgo
bnanaoatqa 
malikgqrlp
oppqfaelpa
aprvelango
lnenoagtqa 
mvlokgqplp
mpcwfaalpa
ghbnnmlspq
oppomobile
EN

回答 1

Stack Overflow用户

发布于 2019-06-03 18:35:00

目前尚不清楚您想要什么,但如果您想阅读,存储和打印不同大小的文件,使用可变长度数组是一种选择。 读取文件以计算行数和最大列数。 声明可变长度数组。如果存在具有不同列的行,则初始化该数组。 倒回文件并将字符存储在数组中。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main ( void) {
    int row = 0;
    int col = 0;
    int line = 0;
    int each = 0;
    int ch = 0;
    FILE *fp = NULL;;

    fp = fopen ( "B12.txt", "r");
    if ( fp == NULL) {
        fprintf ( stderr, "File not Found\n");
        return 0;
    }

    while ( EOF != ( ch = fgetc ( fp))) {//read a character into ch
        if ( '\n' == ch) {//found a newline
            row++;//count rows
            each = 0;
            continue;
        }
        each++;//count characters
        if ( each > col) {
            col = each;//store maximum col
        }
    }

    rewind ( fp);//go back to start of file

    char arr[row][col];//variable length array

    for ( line = 0; line < row; ++line) {
        for ( each = 0; each < col; ++each) {
            arr[line][each] = 0;//set all to 0
        }
    }

    line = 0;
    each = 0;

    while ( EOF != ( ch = fgetc ( fp))) {//read a character into ch
        if ( '\n' == ch) {//found a newline
            line++;//next line
            each = 0;//first character
            continue;//do not store the newline
        }
        arr[line][each] = ch;//save ch into arr
        each++;//next character
    }

    fclose ( fp);

    for ( line = 0; line < row; ++line) {
        for ( each = 0; each < col; ++each) {
            if ( arr[line][each]) {//not 0
                fputc ( arr[line][each], stdout);
            }
        }
        fputc ( '\n', stdout);
    }

    return 0;
}

另一种选择是使用malloc分配内存而不是可变长度数组。这也允许在读取文件一次时进行读取和分配。它可能允许处理更大的文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档