Anzeige:
Ergebnis 1 bis 2 von 2

Thema: strukturen die mittels low level datei io gespeichert und ausgegeben werden sollen

  1. #1
    Registrierter Benutzer
    Registriert seit
    12.09.2004
    Beiträge
    69

    strukturen die mittels low level datei io gespeichert und ausgegeben werden sollen

    hallo,
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <io.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys\stat.h>
    #include <string.h>
    
    #define MAX 20
    
    
    struct struktur {
           char name[100];
           char street[100];
           int alter;
    };
    
    int main() {
    	struct struktur a[100];
    	struct struktur b[100];
    	int i;
    	int datei;
    
    	if((datei=creat("datei.txt",S_IWRITE))==-1) {
    		printf("fehler\n");
    		return -1;
    	}
    
    	for(i=0; i<MAX; i++) {
              ///////////////////////////////...................////////////////
    		a[i].alter=i;
            ////////////////////////////////.........................////////////
    		strcpy(a[i].name,"leer");
    		strcpy(a[i].street,"leer");
    		if((write(datei,&a[i].alter,sizeof(a[i].alter)))==-1)
    			return -1;
    		if((write(datei,&a[i].name,sizeof(a[i].name)))==-1)
    			return -1;
    		if((write(datei,&a[i].street,sizeof(a[i].street)))==-1)
    			return -1;
    	}
    
    	close(datei);
    	if((datei=open("datei.txt",O_RDONLY))==-1) {
    		printf("fehler\n");
    		return -1;
    	}
    
    	for(i=0; i<MAX; i++) {
    		if((read(datei,&b[i].alter,sizeof(b[i].alter)))==-1)
    			return -1;
    		if((read(datei,&b[i].name,sizeof(b[i].name)))==-1)
    			return -1;
    		if((read(datei,&b[i].street,sizeof(b[i].street)))==-1)
    			return -1;
    	}
    
    	for(i=0; i<MAX; i++) {
    		printf("%d\t%s\t%s\n",b[i].alter,b[i].name,b[i].street);
    	}
    
    	close(datei);
    	return 0;
    }
    die ausgabe von diesem programm sieht so aus:
    Code:
    0       leer    leer
    1       leer    leer
    2       leer    leer
    3       leer    leer
    4       leer    leer
    5       leer    leer
    6       leer    leer
    7       leer    leer
    8       leer    leer
    9       leer    leer
    10               leer
    3071             leer
    3327             leer
    3583             leer
    3839             leer
    4095             leer
    4351             leer
    4607             leer
    4863             leer
    5119             leer
    
    "C:\lcc\lcc\test.exe"
    Return code 0
    Execution time 0.011 seconds
    Press any key to continue...
    veränder ich die zeile 30 so um:
    Code:
    a[i].alter=0;
    im ganzen siehts dann so aus (mit "///....///" markiert)
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <io.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys\stat.h>
    #include <string.h>
    
    #define MAX 20
    
    
    struct struktur {
           char name[100];
           char street[100];
           int alter;
    };
    
    int main() {
    	struct struktur a[100];
    	struct struktur b[100];
    	int i;
    	int datei;
    
    	if((datei=creat("datei.txt",S_IWRITE))==-1) {
    		printf("fehler\n");
    		return -1;
    	}
    
    	for(i=0; i<MAX; i++) {
    		///////////////////////////////..................//////////////////////
    		a[i].alter=0;
    		/////////////////////////....................//////////////////////////
    		strcpy(a[i].name,"leer");
    		strcpy(a[i].street,"leer");
    		if((write(datei,&a[i].alter,sizeof(a[i].alter)))==-1)
    			return -1;
    		if((write(datei,&a[i].name,sizeof(a[i].name)))==-1)
    			return -1;
    		if((write(datei,&a[i].street,sizeof(a[i].street)))==-1)
    			return -1;
    	}
    
    	close(datei);
    	if((datei=open("datei.txt",O_RDONLY))==-1) {
    		printf("fehler\n");
    		return -1;
    	}
    
    	for(i=0; i<MAX; i++) {
    		if((read(datei,&b[i].alter,sizeof(b[i].alter)))==-1)
    			return -1;
    		if((read(datei,&b[i].name,sizeof(b[i].name)))==-1)
    			return -1;
    		if((read(datei,&b[i].street,sizeof(b[i].street)))==-1)
    			return -1;
    	}
    
    	for(i=0; i<MAX; i++) {
    		printf("%d\t%s\t%s\n",b[i].alter,b[i].name,b[i].street);
    	}
    
    	close(datei);
    	return 0;
    }
    man erhält diese ausgabe;
    Code:
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    0       leer    leer
    
    "C:\lcc\lcc\test.exe"
    Return code 0
    Execution time 0.011 seconds
    Press any key to continue...
    so und diese ausgabe ist mir schleierhaft, wieso fürht die 0 zu keinen problem, aber die 20 ? -> (i kann nicht größer als 20 sein ! )
    was mach ich da falsch, vorallem verstehe ich nicht wieso da auf einmal solche otopischenwerte die 3071, 3327 usw rauskomen können ... was mach ich da falsch ?
    ist das ewine art sonderfall ... bug ??
    please help

  2. #2
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    hast du dir denn schoneinmal den inhalt deiner geschriebenen datei angeschaut, ob der auch so aussieht wie erwartet?
    also der art
    4byteInt100ByteChar100ByteChar

    überprüfe erstmal die eine seite deines progs.. (das schreiben)
    und erst wenn du sicher bist, dann wende dich dem lesen zu...

    dann ist es vielleicht einfacher einen fehler zu sehen...

    greetz

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •