2013-07-17 13 views
5

Ich bin wirklich neu im Programmieren, und nachdem ich eine Woche lang intensiv über dieses Projekt nachgedacht habe, würde ich mich über Hilfe freuen!Lesen einer Textdatei in ein Array

Ich versuche, in einer langen Textdatei, die nur eine lange Zeichenfolge (NB: keine tatsächliche Programmierzeichenfolge) von Buchstaben ist, zu lesen und dann jeden Buchstaben an seine Stelle im Raster (das Ziel der Programm ist letztlich ein Wortsuchrätsel zu lösen), so weit ich habe unten mit dem Programm kommen, das scheint nicht ein Raster zu produzieren, sondern druckt nur die Textdatei, voran durch:

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

Das Programm, das ich geschrieben habe, ist dies:

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

} 

Sie für jede Vielen helfen Sie

+2

+1 für die Einrückung des Codes (mehr oder weniger), so dass es lesbar ist, und für die Fehlerprüfung auch. Seltener Vogel. –

+1

Allerdings eine Frage: Was meinst du mit "es scheint nicht ein Array zu produzieren"? Sie haben ** das Array: es ist das 'myarray' Objekt (Variable). –

+0

das Programm gibt die Textdatei wie folgt: Mniparogocomputerhardwareywoieeoonodsmecivedegarotspesdfnidpctatrtnytrrrorcreoggimtnatosotmdroeoamupeuciwngbytekmgtoaeanrsnmgtdtittiimrehpponnnidtosdruamhvoaetmogeiuiutemouseopommaeyreaamrtvtfltnmslscmeedctdepulmeaioerkatluieoaredsitasyiamtrrrooeleeccrcyprkyunlontmewgsirsyricopcpoabgpetifgrddyorecsbimrdereapnnckoorecarfrhitnoiprscgstripeoratieotbpaornaoosetyeeatpumotrrmwnarrterrwmprraiopitaarceeaotkeduscdeipoesoskpttoudm von dem seltsamen Text vorangestellt ich in der Post kopiert.Ich habe versucht zu überprüfen, dass die Buchstaben dort sind, wo sie sein sollten, und sie erscheinen nicht – user2591837

Antwort

4

Hier ist die Schönheit von C anbieten:

Sie können die Datei in einem einzigen Vorgang lesen, und sparen Sie sich die Looping:

So etwas wie

fread(myArray, sizeof(myArray), myfile) 

Sie sollten wahrscheinlich initialisieren Sie das Array jedoch nur auf Nullen, bevor Sie dies tun:

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

Oder es mit Nullen füllen, wenn Sie es nicht initialisiert werden:

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

Auch Sie könnten eine neue Zeile („\ n“) am Ende jeder äußeren Schleife in Ihrem Druckbereich drucken möchten: sonst die Dateiinhalte werden als eine lange, kontinuierliche Zeichenfolge angezeigt.

+0

Eine der wenigen Schönheiten von C – turnt

+5

Dies ermutigt jedoch einige schlechte Praxis, die für einen Anfänger schädlich ist zu empfehlen. Erstens, werfen Sie nicht auf "void", es ist überflüssig und das einzige, was es tut, ist die Lesbarkeit zu verringern. Zwei, überprüfe den Rückgabewert von 'fread()' - OP scheint über die Fehlerbehandlung zu wissen, führe ihn nicht in die Irre, weil 'fread()' möglicherweise nicht das gesamte Array liest, in welchem ​​Fall man es erneut versuchen muss. Drei, verwenden Sie 'sizeof (Array)' anstelle einer fest codierten Größe, es ist sicherer. –

+0

Aber die letzte Zeile in dieser Antwort ist kritisch für das OP - die Ausgabe, die erzeugt wird, wird genau wie die Eingabedatei aussehen, es sei denn, Sie fügen neue Zeilen hinzu, um zu sehen, dass es ein Array ist. –

2

Ich werde tun, um Ihr Sommer-Projekt nicht, aber hier ist einige Anmerkungen:

1) Die Textdatei, sondern eine RTF-Datei nicht um eine Textdatei, der Text mit Formatierung ist. Sie haben es wahrscheinlich mit TextEdit erstellt/gespeichert. Ist dies der Fall, verwenden Sie den Menüeintrag "Make Plain Text", um dies zu beheben.

2) Ihr Programm scheint folgendes zu tun: Lesen Sie 26x26 (warum 26?) Zeichen aus einer Datei (einschließlich Leerzeichen, Zeilenumbrüche usw.), legen Sie sie in einem 26x26-Array, und drucken Sie sie einzeln nacheinander. Ich bin mir nicht sicher, was Sie erreichen wollen, aber es scheint etwas mit der Formatierung des Arrays zu tun zu haben. In diesem Fall werden Sie wahrscheinlich darüber nachdenken, wie Sie Leerzeichen in der Eingabe behandeln und sie selbst ausdrucken Ausgabe erzeugen.