2013-07-17 21 views
5

Jestem naprawdę nowy w programowaniu i po ciężkim zastanowieniu się nad tym przez tydzień na letni projekt, naprawdę byłbym wdzięczny za pomoc!Odczytywanie pliku tekstowego do tablicy

Próbuję odczytać w długim pliku tekstowym, który jest tylko długim ciągiem znaków (Uwaga: nie jest to rzeczywisty ciąg programowania) liter, a następnie umieścić każdą literę na swoim miejscu w siatce (celem Program jest ostatecznie rozwiązać wordsearch) do tej pory mam wymyślić poniższym programie, które nie wydają się być produkujących siatki, ale raczej tylko przedruki plik tekstowy, poprzedzony brzmienie:

{\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 

Program, który napisałem to:

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

} 

Dziękuję za wszelkie pomocy można zaoferować

+2

+1 dla wcięcia kodu (więcej lub mniej), aby można go było odczytać, a także do sprawdzania błędów. Rzadki ptak. –

+1

Jednakże, pytanie: co masz na myśli mówiąc "nie wydaje się, że tworzysz tablicę"? Ty ** masz ** tablicę: to obiekt 'myarray' (zmienna). –

+0

program generuje plik tekstowy jak tak: Mniparogocomputerhardwareywoieeoonodsmecivedegarotspesdfnidpctatrtnytrrrorcreoggimtnatosotmdroeoamupeuciwngbytekmgtoaeanrsnmgtdtittiimrehpponnnidtosdruamhvoaetmogeiuiutemouseopommaeyreaamrtvtfltnmslscmeedctdepulmeaioerkatluieoaredsitasyiamtrrrooeleeccrcyprkyunlontmewgsirsyricopcpoabgpetifgrddyorecsbimrdereapnnckoorecarfrhitnoiprscgstripeoratieotbpaornaoosetyeeatpumotrrmwnarrterrwmprraiopitaarceeaotkeduscdeipoesoskpttoudm poprzedzone dziwnym tekstem skopiowane w poście.Próbowałem sprawdzić, czy litery są tam, gdzie powinny być, i nie pojawiają się. – user2591837

Odpowiedz

4

Oto piękno C:

można odczytać pliku w jednej operacji, i oszczędzić sobie pętle:

Coś podobnego

fread(myArray, sizeof(myArray), myfile) 

Powinieneś prawdopodobnie zainicjuj tablicę przed zerami:

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

Lub wypełnij go zerami jeśli nie zainicjować go:

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

Również może chcesz wydrukować znak nowej linii („\ n”) na końcu każdej zewnętrznej pętli w sekcji Drukowanie: inaczej zawartość pliku pojawi się jako jeden długi, ciągły ciąg znaków.

+0

Jedną z niewielu piękności C – turnt

+5

To jednak zachęca do złych nawyków, które są szkodliwe dla początkujących. Po pierwsze, nie rzucaj w "void *", jest to zbyteczne i jedyne co robi to zmniejsza czytelność. Po drugie, sprawdź wartość zwracaną przez 'fread()' - OP wydaje się wiedzieć o obsłudze błędów, nie wprowadzaj go w błąd, ponieważ 'fread()' może nie odczytać całej tablicy, w takim przypadku należy spróbować ponownie. Trzy, użyj 'sizeof (array)' zamiast twardego kodu, jest bezpieczniej. –

+0

Ale ostatnia linia w tej odpowiedzi jest krytyczna dla OP - generowane wyjście będzie wyglądało dokładnie tak samo jak plik wejściowy, chyba że dodasz nowe linie, aby zobaczyć, że jest to tablica. –

2

ja nie zamierzam zrobić swój projekt lato, ale oto kilka uwag:

1) Plik tekstowy nie jest plikiem tekstowym, ale plik RTF, który to tekst z formatowaniem. Prawdopodobnie zrobiłeś/zapisałeś to używając TextEdit. Jeśli tak, użyj elementu menu "Utwórz zwykły tekst", aby to naprawić.

2) Twój program wydaje się wykonywać następujące czynności: odczytaj 26x26 znaków (dlaczego 26?) Z pliku (w tym spacje, znaki nowej linii itp.), Umieść je w tablicy 26x26, a następnie wydrukuj je jeden po drugim. Nie jestem pewien, co próbujesz osiągnąć, ale wydaje się, że ma to coś wspólnego z formatowaniem tablicy, w takim przypadku prawdopodobnie będziesz chciał pomyśleć o tym, jak traktować znaki odstępu w danych wejściowych, i drukować je samemu, gdy generowanie danych wyjściowych.

Powiązane problemy