2013-07-17 4 views
5

Я действительно новичок в программировании, и после долгого размышления об этом в течение недели для летнего проекта я бы очень признателен за помощь!чтение текстового файла в массив

Я пытаюсь прочитать в длинном текстовом файле, который представляет собой длинную строку (NB: не настоящую строку программирования) букв, а затем помещает каждую букву на свое место в сетке (цель программа, в конечном счете решить Wordsearch) до сих пор я придумал программу ниже, которая, кажется, не будет производить сетку, а просто перепечатывает текстовый файл, которому предшествует следующее:

{\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]); 
     } 
    } 

} 

Спасибо за любой поможет вам могут предложить

+2

+1 для отступов кода (более или менее), чтобы он был доступен для чтения и для проверки ошибок. Редкая птица. –

+1

Тем не менее, вопрос: что вы подразумеваете под словом «он, кажется, не создает массив»? У вас ** есть ** есть массив: это объект 'myarray' (переменная). –

+0

программа выводит текстовый файл, например так: Mniparogocomputerhardwareywoieeoonodsmecivedegarotspesdfnidpctatrtnytrrrorcreoggimtnatosotmdroeoamupeuciwngbytekmgtoaeanrsnmgtdtittiimrehpponnnidtosdruamhvoaetmogeiuiutemouseopommaeyreaamrtvtfltnmslscmeedctdepulmeaioerkatluieoaredsitasyiamtrrrooeleeccrcyprkyunlontmewgsirsyricopcpoabgpetifgrddyorecsbimrdereapnnckoorecarfrhitnoiprscgstripeoratieotbpaornaoosetyeeatpumotrrmwnarrterrwmprraiopitaarceeaotkeduscdeipoesoskpttoudm предваряется странным текстом я скопировал в посте.Я попытался проверить, что буквы там, где они должны быть, и они не отображаются – user2591837

ответ

4

Вот красота C:

Вы можете прочитать файл в одной операции, и сэкономить зацикливание:

Что-то вроде

fread(myArray, sizeof(myArray), myfile) 

Вы должны, вероятно, инициализируйте массив ко всем нулям, прежде чем вы это сделаете:

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

Или заполнить нулями, если вы не инициализировать его:

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

Кроме того, вы можете напечатать символ новой строки («\ п») в конце каждого внешнего контура в вашей печатной секции: в противном случае содержимое файла будет отображаться как одна длинная непрерывная строка.

+0

Одна из немногих красавиц C – turnt

+5

Это, однако, поощряет некоторые плохие практики, которые вредно рекомендовать новичкам. Во-первых, не бросайте в 'void *', это лишнее, и единственное, что он делает, - это уменьшение читаемости. Во-вторых, проверьте возвращаемое значение 'fread()' - OP, похоже, знает об обработке ошибок, не вводите его в заблуждение, потому что 'fread()' может не читать весь массив, и в этом случае нужно повторить попытку. Три, используйте 'sizeof (array)' вместо жестко заданного размера, это безопаснее. –

+0

Но последняя строка в этом ответе имеет решающее значение для OP - создаваемый вывод будет выглядеть точно так же, как входной файл, если вы не добавите новые строки, чтобы увидеть, что это массив. –

2

Я не собираюсь делать свой летний проект, но вот несколько замечаний:

1) Текстовый файл не текстовый файл, а файл RTF, который является текст с форматированием. Вы, вероятно, сделали/сохранили его с помощью TextEdit. Если это так, используйте пункт меню «Сделать обычный текст», чтобы исправить это.

2) Ваша программа, кажется, выполняет следующие действия: прочитайте 26x26 (почему 26?) Символов из файла (включая пробелы, символы новой строки и т. Д.), Поместите их в массив 26x26 и затем распечатайте их по одному. Я не совсем понимаю, чего вы пытаетесь достичь, но, похоже, имеет какое-то отношение к форматированию массива, и в этом случае вам, вероятно, захочется подумать о том, как обрабатывать символы пробела во входном файле, и печатать их самостоятельно, когда генерирующий выход.

Смежные вопросы