Brauche Hilfe bei Struct
-
Kann man das dann so schreiben, weil irgendwie muss das ja mit der Aufgabenstellung zu beweltigen sein sonst würd mein Lehrer das ja nicht so hinschreiben...aber ich finde das auch nirgends in einem Buch bzw. in seinem Skript^^:
...
FILE* Textdatei;
ArtikelTyp* Artikel[100];
...Da meckert der Compiler das "Artikel" ein nichtdeklarierter Bezeichner ist, wo er auch Recht hat aber ich weiß nicht wie man das sonst so lösen könnte wie mein Lehrer das will. Ich würde am liebsten en normales char Feld deklarieren und ab geht die Post aber das mit der Strukturmuss ja iwie ins Spiel gebracht werden...denke ich.
-
pAiSTe schrieb:
Kann man das dann so schreiben, weil irgendwie muss das ja mit der Aufgabenstellung zu beweltigen sein
Ja, kannst du, jedoch müsstest du dann für jedes Array-Element Speicher allozieren und das ist an dieser Stelle einfach nur unnötig und erschwerend.
pAiSTe schrieb:
sonst würd mein Lehrer das ja nicht so hinschreiben...
Sag sowas nicht
btw: Dir fehlt noch ein fclose am Schluss.
-
Also ich hab jetzt einfach mal das ganze so geschrieben, dass ich davon ausgehe, dass nur der Text einer Textdatei in ein Feld eingelesen werden soll. Was es trotzdem mit dem Ausdruck "ArtikelTyp* Artikel[100]" auf sich hat, bleibt mir trotzdem fraglich.
Danke nochmal für die schnellen Antworten.int main(){
FILE* Textdatei;
char Artikel[100];
int i=0;
char s=NULL;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;}
fclose(Textdatei);
Artikel[i]='\0';printf("%s", Artikel);
getch();
return 0;
}
-
pAiSTe schrieb:
Was es trotzdem mit dem Ausdruck "ArtikelTyp* Artikel[100]" auf sich hat, bleibt mir trotzdem fraglich.
Es ist ein Array mit 100 Elementen vom Typ 'Zeiger auf ArtikelTyp'. Um das so zu benutzen musst du, wie gesagt, für jedes dieser Elemente Speicher allozieren, was unnötig ist.
Warum du die Struktur jetzt weggelassen hast und alles in einem String schreibst, ist mir schleierhaft. Die Struktur ist bzw. war doch eine gute Lösung, oder nicht?!
-
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?