Brauche Hilfe bei Struct



  • Hm joa okay...wie würde man dann den Speicher dafür allozieren? Mit (ArtikelTyp*)malloc(sizeof(ArtikelTyp))?



  • Gleich sagt wieder jemand, daß man malloc nicht casten soll.



  • for (i = 0; i < 100; i++) {
        Artikel[i] = malloc (sizeof (*Artikel));
    }
    

    Und um auf die Variablen der Struktur zugreifen zu können:

    Artikel[3][0].preis
    Artikel[3][0].bezeichnung
    

    Der zweite Index muss hier immer 0 sein.



  • Also jetzt kommt immer:

    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    #include <ctype.h>

    struct Schreibwaren{
    float preis;
    char bezeichnung[100];
    char eigenschaft[100];
    }ArtikelTyp;

    int main(){

    FILE* Textdatei;
    ArtikelTyp* Artikel[100];
    int i=0;
    char s=NULL;

    for (i = 0; i < 100; i++) {
    Artikel[i] = malloc (sizeof (*Artikel));
    }

    Textdatei = fopen("C:\\liste.txt" , "r");

    if(Textdatei==NULL)printf("Datei wurde nicht gefunden.");

    for(i=0;s!=EOF || i<99;i++)
    {
    s=fgetc(Textdatei);
    Artikel[i]=s;
    printf("%c", Artikel[i]);
    }
    fclose(Textdatei);
    Artikel[i]='\0';

    getch();
    return 0;
    }

    : error C2065: 'Artikel': nichtdeklarierter Bezeichner
    : error C2065: 'Artikel': nichtdeklarierter Bezeichner
    : error C2065: 'Artikel': nichtdeklarierter Bezeichner
    : error C2070: ''unknown-type'': Ungültiger sizeof-Operand
    : error C2065: 'Artikel': nichtdeklarierter Bezeichner
    : error C2065: 'Artikel': nichtdeklarierter Bezeichner
    : error C2065: 'Artikel': nichtdeklarierter Bezeichner



  • Es fehlt der zweite Index bei Artikel.



  • Hm, also man soll ja den kompletten Text in ein Feld einlesen.
    Für was steht jetzt der 2. Index?
    Müsste man dann das so schreiben?:
    Artikel[i][0]=s;



  • Nimm fscanf zum Einlesen:

    fscanf (Textdatei, "%f %100s %100s", &Artikel[i][0].preis, Artikel[i][0].bezeichnung, Artikel[i][0].eigenschaft);
    

    pAiSTe schrieb:

    Für was steht jetzt der 2. Index?

    Der steht für das (unnötig) allozierte Element.



  • hellseher schrieb:

    Gleich sagt wieder jemand, daß man malloc nicht casten soll.

    Nee, ich werd' einfach nur blind ohne c/c++- Tags.

    Achje, das war jetzt nicht so wirklich konstruktiv 😞



  • Hm nagut ich werde nochmal über alles drüberschaun und nachdenken...dann hab ich nochmal ne kurze aufgabe aber bin mir da nicht so sicher...wie legt man da den Typ fest?
    Und zwar:
    Welchen Wert und welchen Typ haben folgende Ausdrücke?
    a) 19/4.0
    b) 19/5
    c) 62L
    d)(double)(5/3)
    e) (float) 4/3
    f) 1,14
    g) 12/5+3.2
    h) -128
    i) (char) 65/'A'
    J)32UL



  • Welchen Wert und welchen Typ haben folgende Ausdrücke?

    Wenn du castest oder Präfix-Literale verwendest, immer den gewünschten. Sonst den "einfachsten", der den Wert aufnehmen kann.



  • mit "einfachsten" meinst du Priorität oder Bytes?


Anmelden zum Antworten