5

我对编程真的很陌生,在为一个暑期项目认真考虑了一周之后,我真的很感激一些帮助!

我正在尝试读取一个长文本文件,它只是一个长字符串(NB:不是实际的编程字符串)的字母,然后将每个字母放在网格中的位置(程序的目的最终是解决一个单词搜索)到目前为止,我已经想出了下面的程序,它似乎没有产生一个网格,而只是重新打印了文本文件,前面有以下内容:

{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf510    
{\fonttbl\f0\fmodern\fcharset0 Courier;}
{\colortbl;\red255\green255\blue255;}
\paperw11905\paperh16837\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\deftab720
\pard\pardeftab720

\f0\fs24 \cf0 

我写的程序是这样的:

#include <stdio.h>
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h>
#include <stdbool.h>

int main()
{
    int i,j;
    char myarray[26][26],x;
    FILE *myfile;

    for (j=0; j<26; j++)                 //initialise array elements all to zero
    {
        for (i=0; i<26; i++)
        {
            myarray[i][j]=0;
        }
    }

    myfile=fopen("*redacted*","r");
    if (myfile!=NULL) //check file actually opened
    {
        for (i=0; i<26; i++)
        {
            for(j=0; j<26; j++)
            {
                fscanf(myfile,"%c",&x); //read the values in
                myarray[i][j]=x;
            }
        }
        // data is now in the array called myarray
        fclose(myfile);        
    }

    else
    {
        printf("File not found");
    }

    for(i=0;i<26;i++)
    {
        for(j=0;j<26;j++)
        {
            printf("%c",myarray[i][j]);
        }
    }

}

感谢您提供的任何帮助

4

2 回答 2

4

这是C的美妙之处:

您可以在单个操作中读取文件,并为自己保存循环:

就像是

fread(myArray, sizeof(myArray), myfile)

但是,在执行此操作之前,您可能应该将数组初始化为全零:

char myArray[26][26] = { 0 };

如果您不初始化它,或者用零填充它:

 memset(myArray, 0, sizeof(myArray));

此外,您可能希望在打印部分的每个外部循环的末尾打印一个换行符(“\n”):否则文件内容将显示为一个长而连续的字符串。

于 2013-07-17T14:52:46.153 回答
2

我不打算做你的暑期项目,但这里有一些评论:

1)文本文件不是文本文件而是RTF文件,是带格式的文本。您可能使用 TextEdit 制作/保存了它。如果是这样,请使用“制作纯文本”菜单项来解决此问题。

2)您的程序似乎在执行以下操作:从文件中读取 26x26(为什么是 26?)字符(包括空格、换行符等),将它们放入 26x26 数组中,然后一一打印。我不清楚您要实现什么,但它似乎与格式化数组有关,在这种情况下,您可能需要考虑如何处理输入中的空白字符,并在何时打印它们自己产生输出。

于 2013-07-17T15:04:08.040 回答