Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » char array[22][78] aus Datei auslesen und in Datei Schreiben(C)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
12.02.2005, 12:18 Uhr
FBIagent



Wie der Betreff schon sagt: Wie kann ich ein
char array[22][78] in eine Datei schreiben und
aus einer Datei lesen.

Ich bastle an einer Pacman nachmache.

THX
MFG
Christian
--
Bill Gates is watching you....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.02.2005, 12:34 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


c oder c++
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.02.2005, 12:44 Uhr
FBIagent



In C.
Hab schon einige versuche hinter mir.
Also jedes eintzelne zeichen auslesen und schreiben.

MFG
THX
Christian
--
Bill Gates is watching you....

Dieser Post wurde am 12.02.2005 um 12:58 Uhr von FBIagent editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.02.2005, 13:38 Uhr
FBIagent



Keiner?
--
Bill Gates is watching you....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.02.2005, 13:58 Uhr
enno-tyrant
Frag nicht!


das müßte es sein, anmerkungen siehe unten:


Code:
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;

#define zeile  22
#define spalte 78

int main()
{
///////////////////////////////////////////
  unsigned int i, j;
  char array[zeile][spalte];
  string puffer;
  ifstream datei;
///////////////////////////////////////////
  datei.open("123.txt");
  getline(datei,puffer);
  datei.close();
  datei.clear();
///////////////////////////////////////////
  for(i=0; i<zeile;++i)
    {
      for(j=0; j<spalte;++j)
        {
          array[i][j] = puffer[i];
        }
    };
///////////////////////////////////////////
  for(i=0; i<zeile;++i)
    {
    for(j=0;j<spalte;++j)
      {
        printf("array[%d][%d]=%c\n",i,j,array[i][j]);
      }
    };
getch();
}



anmerkungen:
-du versuchst eine datei in ein 2d-array einzulesen. warum? nur ein 1-d array macht dabei sinn, compiliere es und du wirst sehen was ich meine.
-das ist eine c/c++ mischung ( ) kannte gerade den 'fstream'-include für c nicht
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.02.2005, 13:59 Uhr
enno-tyrant
Frag nicht!



Zitat von FBIagent:
Keiner?
--
Bill Gates is watching you....


übe dich in geduld, es ist wochenende
--
...um etwas zu verstehen muß man wissen wie es funktioniert...

Dieser Post wurde am 12.02.2005 um 13:59 Uhr von enno-tyrant editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.02.2005, 16:54 Uhr
FBIagent



Ne Mischung aus C u. Cpp bringt mir nicht viel. Ich muss das ganz in C lösen.

So hatte ich es versucht:


Code:

//Feldarray initialisieren
if((stream=fopen(filename,"r"))!=NULL){
    x=0;
    y=0;
    stream=fopen(filename,"r");
    while(field[x][y]==EOF){
        streamc=fgetc(stream);
        field[x][y]=streamc;
        if(x==78){
            x=-1;
        }
        x++;
        y++;
    }
    fclose(stream);
}
else{
    for(y=0;y<23;y++){
        for(x=0;x<79;x++){
            field[x][y]='|';
        }
    }
}


//Feldarray Speichern
stream=fopen(filename,"w");
for(y=0;y<79;y++){
    for(x=0;x<23;x++){
        streamc=field[x][y];
        fputc(streamc,stream);
    }
}
fclose(stream);



Wenn´s gehen würde bitte ne´n Ansatz in C und nicht Cpp.


Zitat von enno-tyrant:

übe dich in geduld, es ist wochenende



Hab nie viel Zeit!


THX
MFG
Christian
--
Bill Gates is watching you....

Dieser Post wurde am 12.02.2005 um 16:59 Uhr von FBIagent editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.02.2005, 17:23 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


anzahl zeilen mal read (oder mit fgets lässt sich da auch was basteln) aufrufen
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.02.2005, 21:24 Uhr
virtual
Sexiest Bit alive
(Operator)



C++:
char array[22][78];
FILE* datei;

// Schreiben:
fwrite(array, 1, sizeof(array), datei);

// Lesen:
fread(array, 1, sizeof(array), datei);


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.02.2005, 16:34 Uhr
FBIagent



Ich hab das fwrite(); und das fread(); eingebaut.

Ich hab jetzt aber noch ein problem(0xC0000005: Access Violation):

Accsess Violation kommt immer dann vor, wenn ich einem Teil des Arrays filed ein Zeichen
zuweisen möchte und wenn ich einen Teil des Arrays field ausgeben möchte!
Ich weis aber nicht warum.

Was ist eigentlich Accsess Violation genau?

Ich habe mal den ganzen QTXT gepostet, weil ihr mir dann warscheinlich schneller helfen
könnt!


Code:

//Header Dateien
#include <stdio.h>
#include <conio.h>
#include <windows.h>

//Variablen Deklarationen
#define filename "field.fcm"
char field[78][22];
char player,sign,key,sign;
int x,y,posx,posy,points;
FILE *stream;

int gotoxy(int x, int y){
    HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X=x-1;
    pos.Y=y-1;
    SetConsoleCursorPosition(hCon, pos);
    return 0;
}//Setzt den Cursor an eine bestimmte Position(nicht von mir)

int clrline(int line){
    int x;
    
    gotoxy(1,line);
    for(x=1;x<81;x++){
        printf("");
    }
    return 0;
}//Zeile Löschen

int cout_points(){
    int x,y,cout;
    cout=0;

    for(y=0;y<23;y++){
        for(x=0;x<79;x++){
            key=field[x][y];
            if(key=='.') cout++;
        }
    }
    return cout;
}//Körner zählen

int init(){
    //Variablen Dekleration
    int x,y;
    
    //Variablen initialisieren
    points=0;
    posx=1;
    posy=1;
    player='#';
    sign='.';

    //Feldarray initialisieren
    if((stream=fopen(filename,"r"))!=NULL){
        stream=fopen(filename,"r");
        fread(field, 1, sizeof(field), stream);
        fclose(stream);
    }
    else{
        for(y=0;y<23;y++){
            for(x=0;x<79;x++){
                field[x][y]='|';
            }
        }
    }

    //Setzt Spielerzeichen auf position im Array
    field[posx][posy]='#';

    //Spielfeld wird ausgegeben
    for(y=0;y<23;y++){
        for(x=0;x<79;x++){
            gotoxy(x+1,y+2);
            printf("%c",field[x][y]);
        }    }

    //Körner zählen und ausgeben
    points=cout_points();
    gotoxy(1,25);
    printf("%i Koerner gesetzt",points);

    return 0;
}//Initialisierngs Funktion

int keypress(){
    //Wenn eine taste gedrückt wurde, wird diese in keypressed gespeichert
    if(kbhit()){
        key=getch();
    }
    return 0;
}//Tastaturfunktion

int sign_chioce(){
    if(key=='g') sign='.';
    if(key=='m') sign='|';
    return 0;
}

int calculate_output(){

    //Wenn keypress nicht 0 ist, dann wird an der Position des Spielers das ausgewählte
      Zeichen ausgegeben
    if(key!=0){
        field[posx][posy]=sign;
        gotoxy(posx+1,posy+2);
        printf("%c",field[posx][posy]);
    }

    //Berechnung der Bewegung
    switch(key){
        case 72: if(posy>1) posy--;
                 break;
        case 80: if(posy<21) posy++;
                 break;
        case 75: if(posx>1) posx--;
                 break;
        case 77: if(posx<77) posx++;
    }

    //Spielerzeichen wir an seiner Position in das Array gegeben und ausgegeben
    field[posx][posy]=player;
    gotoxy(posx+1,posy+2);
    printf("%c",field[posx][posy]);

    if(key!=0 && key!=27){
        //Körner zählen und ausgeben
        points=cout_points();
        clrline(25);
        gotoxy(1,25);
        printf("%i Koerner gesetzt",points);
    }
    
    //keypress wird auf 0 gesetzt wenn keypress vorher nicht den Dezimalwert 27 hat
    if(key!=27) key=0;
    return 0;
}//Berechnung und Neuausgabe

int ending(){
    stream=fopen(filename,"w");
    fwrite(field, 1, sizeof(field), stream);
    fclose(stream);
    return 0;
}//Funktion nach beendigung des Spiels

int main(){

    init();
    do{
            keypress();
            sign_chioce();
            calculate_output();
    }while(key!=27);
    ending();
}//Hauptfunktion



THX
MFG
Christian
--
Bill Gates is watching you....

Dieser Post wurde am 14.02.2005 um 16:38 Uhr von FBIagent editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: