Bitte um Hilfeeeee
Verfasst: Fr Okt 24, 2014 2:50 pm
				
				Hallo 
Bin neu hier.
Habe eine Frage zu diesen C Programm:
Kann mir das Programm jemand kurz erklären?
für was was ist, zb. struct Buch getBuch() ; int errLinenumber ; int leseausdatei(char filename[], struct Buch feld[], int feldmax) ;oder int isEmtyausserLeerzeichen(char str[]) und welche Aufgabe es im Programm hat?
Es ist wirklich wichtig für mich!
Danke
Lg Marcel
Edit by Xin: CodeFlags eingefügt
			Bin neu hier.
Habe eine Frage zu diesen C Programm:
Kann mir das Programm jemand kurz erklären?
für was was ist, zb. struct Buch getBuch() ; int errLinenumber ; int leseausdatei(char filename[], struct Buch feld[], int feldmax) ;oder int isEmtyausserLeerzeichen(char str[]) und welche Aufgabe es im Programm hat?
Es ist wirklich wichtig für mich!
Danke
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 
 */
struct Buch
{
    char titel[50];
    char autor[30];
    int erscheinungsjahr;
    double preis;
};
int errLinenumber;
void ausgabe (struct Buch b, int i)
{
    printf("\nBuch %d\n",i);
    printf("    Titel: %s \n",b.titel);
    printf("    Autor: %s \n",b.autor);
    printf("    Erscheinungsjahr: %d \n",b.erscheinungsjahr);
    printf("    Preis: %.2lf \n",b.preis);
}
struct Buch getBuch()
{
    struct Buch b;
    char s[80];
   
    printf("\n");
    do
    {
        printf("Titel:");
        fgets(s,sizeof s, stdin);
    }
    while (strlen(s)==0);
    s[strlen(s)-1]=0;//\n weg bei der Ausgabe
    strncpy(b.titel, s, sizeof (b.titel)); 
    
    
    do
    {
        printf("Autor:");
        fgets(s,sizeof s, stdin);
    }
    while (strlen(s)==0);
    s[strlen(s)-1]=0;
    strncpy(b.autor, s, sizeof (b.autor));
    
    do
    {
        printf("Preis:");
        fgets(s,sizeof s, stdin);
        sscanf(s,"%lf",&b.preis);
    }
    while (strlen(s)==0 || b.preis<0.0);
    
    do
    {
        printf("Jahr:");
        fgets(s,sizeof s, stdin);
        sscanf(s,"%d",&b.erscheinungsjahr);
    }
    while (strlen(s)==0);
      
    return b;
}
int isEmtyausserLeerzeichen(char str[])
{
    int i=0;
    while(1)
    {
        char c=str[i++];
        
        if(c==0)
            return 1;
        
        if(c!=' ' && c!='\t' && c!= '\n' && c!='\r')
            return 0;
    }
}
//fehler <0
//buecher>=0
int leseausdatei(char filename[], struct Buch feld[], int feldmax)
{
    //f ist der Filehandler
    FILE *f = fopen(filename, "r");
    int i, n, errcode;
    errLinenumber = 0;
    if (f == NULL)
        return -1;//datei lässt sich nicht öffnen
    
    for(n=0;n>-1;n++)
    {
        char s[1024];
        
        if (fgets(s,sizeof s, f)==NULL)
        {
            fclose (f);
            errLinenumber = -1 ;
            return n;
        }
        
        s[strlen(s)-1]=0;
        
        struct Buch buch;
        char *p;
        p=strtok(s, ",");
               
        if (p==NULL || isEmtyausserLeerzeichen(p))
            continue;//leere Zeile?
        strncpy(buch.titel, p, sizeof(buch.titel));
        
        errLinenumber++;
        
        p=strtok(NULL, ",");       
        if (p==NULL)
        {
            errcode=-2;
            break;
        }
        strncpy(buch.autor, p, sizeof(buch.autor));
        
        p=strtok(NULL, ",");
        if (p==NULL)
        {
            errcode=-3;
            break;
        }
        if(sscanf(p,"%d", &buch.erscheinungsjahr)!=1)
        {
            errcode=-4;
            break;
        }
        
        p=strtok(NULL, ",");
        if (p==NULL)
        {
            errcode=-5;
            break;
        }
        if(sscanf(p,"%lf", &buch.preis)!=1)
        {
            errcode=-6;
            break;
        }
        
        feld[n]=buch;
    }
    
    
    fclose(f);
    return errcode;
}
int schreibeindatei(char filename[], struct Buch feld[], int feldmax)
{
    int i;
    FILE *f = fopen (filename, "w");
    if(f==NULL)
        return-1;
    
    for(i=0;i<feldmax;i++)
    {
        struct Buch *pb = &feld[i];
        fprintf(f,"%s",pb->titel);
        fprintf(f,",%s",pb->autor);
        fprintf(f,",%d",pb->erscheinungsjahr);
        fprintf(f,",%lf",pb->preis);
        fprintf(f,"\n");
    }
    fclose(f);
    
}
int main()
{
    struct Buch bibliothek[100];
    int i;
    int anzahl, err;
    
    printf("\tBuecherliste\n");
    printf("\t------------\n\n");
    
    anzahl=leseausdatei("file1.csv", bibliothek, 100);
    if(anzahl<=0)
    {
        int error=anzahl;
        printf("Fehler beim Lesen (code %d) in Zeile%d\n",error, errLinenumber);
        return -1;
    }
    
    for (i=0;i<anzahl;i++)
        ausgabe(bibliothek[i], i+1);
    
    bibliothek[6]=getBuch();
    
    err=schreibeindatei("file1.csv", bibliothek, anzahl);
    if(err<=0)
    {
        printf("Fehler beim Lesen (code %d) in Zeile%d\n",err);
        return -2;
    }
    
    struct Buch meinErstesBuch;
    struct Buch meinZweitesBuch={"Max und Moriz","Wilhelm Busch",1845,10.99};                      // nur beim Anlegen der Struktur
    struct Buch meinDrittesBuch;
    
    meinErstesBuch.preis = 120.99;
    strncpy(meinErstesBuch.autor,  "Kehlmann", sizeof(meinErstesBuch.autor));
    strncpy(meinErstesBuch.titel,  "Die Vermessung der Welt", sizeof(meinErstesBuch.titel));
    meinErstesBuch.erscheinungsjahr =2007;
    meinDrittesBuch = getBuch();
      
    bibliothek[0]=meinErstesBuch;
    bibliothek[1]=meinZweitesBuch;
    bibliothek[2]=meinDrittesBuch;
    
    
    for (i=0;i<4;i++)
        ausgabe(bibliothek[i], i+1);
    
    printf("\n\n");
    
    return (0);
}
Edit by Xin: CodeFlags eingefügt