Fehlersuche in C

OP #6518908
Lesenswert?

ich möchte ein Programm erstellen womit ich mein Lager verwalten kann !
Bin noch Anfänger in C

ich habe hier schonmal geschrieben wie mein Programm aufgebaut werden 
soll, aber der Compiler gibt mir immer einen Fehler beim struct ein.

hier mein Code:
#include <stdio.h>


    const int NAMELENGTH = 100;

        typedef strcut Artikel{
        char artikel[Namelength];
        int anzahl:
        }Artikel;


    void ArtikelZufuegen(){

    }

    void ArtikelAnzahl(){

    }

    void tabelle(){

    }


    int main(){

    }
Beitrag #6518933 wurde von einem Moderator gelöscht.
Beitrag #6518966 wurde von einem Moderator gelöscht.
Beitrag #6518970 wurde von einem Moderator gelöscht.
Gast #6518972
Lesenswert?

Taw U. schrieb:
> ich möchte ein Programm erstellen womit ich mein Lager verwalten kann !

Sorry für Offtopic aber:
Würde ich mit einem Konzept anfangen. Auswahl von Datenbank und 
Programmiersprache sind da wichtige Punkte.

C ist eine super Sprache, aber imo so ziemlich die am wenigsten 
geeignete Sprache für Datenbanken.  Das ist ein besserer Makroassmbler 
mit dem man wunderbar hardwarenahes proggen kann. Meine Wenigkeit würde 
mit SQlite und "alles ausser C" (z.B. Python) anfangen.

Wenn du C lernen willst gibt es bessere Projekte.

>ich habe hier schonmal geschrieben wie mein Programm aufgebaut werden
>soll, aber der Compiler gibt mir immer einen Fehler beim struct ein.

Da geht das schon los, simpler Schreibfehler und du hast keinen Hinweis 
was falsch ist. Dann hats du einen gefunden, da ist aber noch ein 
zweiter.

Bei C kämpft man den ganzen Tag mit so was.

Bitte um Verzeihung das es die Frage nicht beantwortet, aber ich fand 
das wichtig in Sachen Anfänger und C.

Heiner schrieb im Beitrag #6518970:
> Nicht zu Dir!

Er liegt aber genau so richtig wie du ;-)
Gast #6518974
Lesenswert?

Ich würde dazu eine Entwicklungsumgebung wie Qt Creator empfehlen. Deren 
Editoren zeigen viele Fehler schon während der Eingabe an und mit etwas 
Glück sogar besser verständlich, als die Fehlermeldungen des Compilers.
Beitrag #6518975 wurde von einem Moderator gelöscht.
Beitrag #6518979 wurde von einem Moderator gelöscht.
Gast #6518980
Lesenswert?

So zeigt Qt Creator die Fehler an.

Merke dir dazu eins: Wenn die Stelle mit der Fehlermeldung gut aussieht, 
dann ist der Fehler meistens in der Zeile darüber. Und wenn die auch gut 
aussieht, dann sind meistens Klammern falsch gesetzt. Dabei hilft 
wiederum die Automatische Einrückung der IDE. Ab der Fehlerhaften Stelle 
rückt sie ganz anders ein, als man erwarten würde.
Beitrag #6518986 wurde von einem Moderator gelöscht.
Gast #6518989
Lesenswert?

Nochwas:

Im Gegensatz zu vielen anderen Programmiersprachen bricht der C Compiler 
nicht beim ersten Fehler ab, sondern versucht sich irgendwie weiter 
durch zu wursteln. Dabei kommen dann oft ganz seltsame falsche 
Fehlermeldungen zustande.

Also immer erst den obersten Fehler korrigieren und dann schauen, was 
noch übrig bleibt.
Beitrag #6518990 wurde von einem Moderator gelöscht.
Gast #6518999
Lesenswert?

So wäre es compilierbar:
1
const int NAMELENGTH = 100;
2

3
typedef struct {
4
    char artikel[NAMELENGTH];
5
    int anzahl;
6
} Artikel;

Offenbar hast du aber noch kein Konzept über deine Objekte. Weil

a) Ein Artikel hat in der Regel keine Anzahl, wohl aber andere Attribute 
wie Artikelnummer, Titel, Beschreibung, Preis

b) Eine Position in einer Bestellung würde auf einen Artikel verweisen 
und hätte eine Anzahl
Gast #6519047
Lesenswert?

Stefan ⛄ F. schrieb:
> Offenbar hast du aber noch kein Konzept über deine Objekte.

Sorry, aber dein Vorschlag ist auch Bloedsinn. Es braucht:
- Artikel: fasst dessen Eigenschaften zusammen, Index ID
- Lager: zaehlt Anzahl, offene Zu- und Abgaenge, Mindestbestand
- Bestellung: wird Lager erhoehen
- Auftrag: vermindert Lagerstand

leo
Gast #6519056
Lesenswert?

leo schrieb:
> Sorry, aber dein Vorschlag ist auch Bloedsinn. Es braucht:

Sorry, aber dein Vorschlag ist auch komplett falsch:

Wenn er eine Datenbank entwickeln will, dann ist der C-Code der 
allerletzte Schritt.
Es fängt an mit einem ERD. Und damit ist das alles schon gestorben. Der 
TO soll sich erst mal mit C beschäftigen. Wenn er jetzt noch mit 
Datenbank-Design anfängt ist er komplett überfordert. Ausser er kann 
schon die Normalformen im Schlaf aufsagen.

Ich würde sowas mit mySQL entwerfen und das UI mit Tcl/Tk dazu machen. 
Das mit C zu machen käme mir nicht mal im Traum.
#6519057
Lesenswert?

Nö.
Stefan hat schon Recht. Man braucht ein Konzept.
Gerade als Anfänger.

Was soll denn nen Lagerprogramm verwalten?
Richtig den Lagerbestand.
3 Schrauben? 2 Transistoren?
Nö.
Hunderte, wenn nicht tausende Artikel.
Deshalb würd ich auf SQLite aufbauen. Diese
Datenbank ist Opensource und macht dann die Speicherung
der Objekte.
Man braucht sich da nich um Baume, Indexierung und so
weiter zu kümmern.
Als Anfänger hat man schon mit der Logik und den
Masken des Lagerprogrammes genug zu tun.


mfg
Gast #6519068
Lesenswert?

Also wenn dein Ziel "ich möchte ein Programm erstellen womit ich mein 
Lager verwalten kann" ist, dann würde ich ebenfalls dringend dazu raten, 
die Wahl der Programmiersprache zu überdenken.
C ist für solche Aufgaben heute nicht mehr zeitgemäß. Du arbeitest in C 
oft an der Lösung von Problemen, die es in anderen Programmiersprachen 
gar nicht erst gibt. Siehe z.B. Zeichenketten.

Wie wäre es z.B. mit Python, C# oder Kotlin/Java?
Gast #6519088
Lesenswert?

~Mercedes~  . schrieb:
> Was soll denn nen Lagerprogramm verwalten?
> Richtig den Lagerbestand.
> 3 Schrauben? 2 Transistoren?
> Nö.
> Hunderte, wenn nicht tausende Artikel.
> Deshalb würd ich auf SQLite aufbauen

Was für ein Konzept.

Der Mann kriegt nichtmal eine Strukturdeklaration in C hin.

Der ist froh, wenn etwas wie ein BASIC-Programm bei rauskommt.

Auch tausende Artikel sind bei heutigen Hauptspeichergrößen kein 
Problem.

Du steckst mit deinen Konzepten  noch im vorherigen Jahrtausend fest.

Lass ihn sein Array aufbauen.
Gast #6519099
Lesenswert?

Nick M. schrieb:
> C wird ihm überhaupt nicht helfen. Oder schlägst du vor, er soll ein GUI
> zu einer DB in C programmieren?

Habe ich mal gemacht, ja. Verkauft und gelebt davon auch.

> Auf welcher Plattform?
> Windows? ***Hahahaha***

Naja, das hat mit MSDOS angefangen, dann DosBox.

> Ich glaub, du bist Sadist.

Nein, warum? GUI-Bibliotheken die unter C benutzt werden, gibt es viele.

Der TO braucht halt Konzept, GUI und DB. Das ist zum C lernen viel zu 
viel.

leo
Gast #6519102
Lesenswert?

Warum nicht direkt die komplette Frühzeit überspringen und das Ganze in 
C# oder so machen? Dort ist die Einbindung von SQLite über NuGet und das 
Anbinden an die üblichen Controls nun wirklich keine Hexerei...
Gast #6519130
Lesenswert?

leo schrieb:
> Mit e.g. fltk ist das nicht schwer.

Ich kannte das nicht. Sieht nett aus.
Braucht aber C++
1
int main(int argc, char *argv[]) {
2
   Fl_Double_Window *w = new Fl_Double_Window(330, 190);
3
   Fl_Button *b = new Fl_Button(110, 130, 100, 35, "Okay");
4
   b->callback(ok_callback);
5
   w->end();
6
   w->show(argc, argv);
7
   return Fl::run();
8
}
Gast #6519148
Lesenswert?

leo schrieb:

> Nick M. schrieb:
>> Ich würde sowas mit mySQL entwerfen und das UI mit
>> Tcl/Tk dazu machen.
>
> Sicher brauchts hinter den genannten Datenstrukturen
> eine DB. Tcl/Tk wird den TO bei C aber definitiv nicht
> helfen.

Tcl/Tk würde ihm DEFINITIV helfen:

1. Kleine (!!) Datenbankprobleme erschlägt man direkt
   mit Tcl.
2. Als Nachbrenner kann man bei Bedarf sqlite verwenden.

3. Falls das noch nicht genügt, kann man aus Tcl auf
   diverse Datenbanken zugreifen. Visualisierung geht
   dann über Tk.

4. Wenn es unbedingt C sein muss: Man kan Tcl-Erweiterungen
   in C schreiben.

5. Zu guter Letzt: Wer erst Tcl lernt und dann C, macht
   sich m.E. das Leben deutlich angenehmer -- er kennt
   dann nämlich schon einen Großteil der C-Syntax, ohne
   ohne sich mit dem kranken Typsystem von C oder wildem
   Herumgepointere befassen zu müssen. Das kommt dann erst
   im zweiten Anlauf, beim Lernen von C.
Gast #6519157
Lesenswert?

Egon D. schrieb:
> Tcl/Tk würde ihm DEFINITIV helfen:

Das ginge auch mit Python. Oder mit Perl. Oder mit OCaml. Oder ...

Ist aber völlig egal:
Der TO kann nicht mal einen 20-Zeiler in C kompilieren, ist nicht in der 
Lage Fehlermeldungen zu lesen, antwortet hier schon nicht mehr, hat 
keinen Schimmer von Datenbanken und braucht weder das dumme Dahergerede 
derer die sich inzwischen durch Löschungen hier verewigt haben noch 
andere Tips die seinem derzeitigen Wissensstand gefühlte 30 Jahre voraus 
sind.
Gast #6519163
Lesenswert?

Taw U. schrieb:
> ich möchte ein Programm erstellen womit ich mein Lager verwalten kann !
> Bin noch Anfänger in C

Warum willst du dir das an tun. Was hast du überhaupt für Anvorderungen 
an eine Lagerverwaltung. Schau dir z.B. mal EleLa an.

Link zum Artikel hier im Forum:
Beitrag "EleLa - Elektronik Lagerverwaltung V3.1"

Link zur Web-Seite des Programmierers:
http://www.mmvisual.de/elela/
(Firma: Zombieland) #6519231
Lesenswert?

leo schrieb:
> Nein, warum? GUI-Bibliotheken die unter C benutzt werden, gibt es viele.
das ist richtig - nur davon haben die wenigsten überhaupt eine Ahnung.

> Der TO braucht halt Konzept, GUI und DB. Das ist zum C lernen viel zu
> viel.
Der TO wird hier keine weiterführenden Antworten bekommen ... die muß er 
schon selbst finden und das wird dauern.
Gast #6519316
Lesenswert?

Es fibt noch solche Sachen wie Listen.

Und wenn man wirklich so ein Programm braucht, dann muss man ja das 
Ganze noch speichern.
1
#include <stdio.h>
2
#include <string.h>
3

4
#define MAX_NUM_PRODUCTS 512
5
#define MAX_NAME_LEN 128
6

7
int last_pos = 0;
8

9
typedef struct product {
10
   char product_name[MAX_NAME_LEN];
11
   int num_product;
12
} product_s;
13

14
product_s product[MAX_NUM_PRODUCTS];
15

16
void
17
add_product (const char* name, const int num)
18
{
19
   if (last_pos >= MAX_NUM_PRODUCTS) {
20
      fprintf (stderr,
21
               "ERROR: max number of products has been "
22
               "reached\n");
23
      return;
24
   }
25

26
   strcpy (product[last_pos].product_name, name);
27
   product[last_pos].num_product = num;
28

29
   last_pos++;
30
}
31

32
int
33
get_num_of_products (void)
34
{
35
   return last_pos;
36
}
37

38
void
39
list_products (void)
40
{
41
   int last = get_num_of_products();
42

43
   for (int i = 0; i < last; i++) {
44
      printf ("\npos:\t%d\nproduct:\t%s\navailable:\t%d\n",
45
              i,
46
              product[i].product_name,
47
              product[i].num_product);
48
   }
49
}
50

51
int
52
main (void)
53
{
54
   add_product ("apple", 10);
55
   add_product ("banana", 20);
56
   add_product ("tomato", 30);
57

58
   list_products();
59

60
   return 0;
61
}
Gast #6519389
Lesenswert?

Nick M. schrieb:
> Hab ich gemacht. Und dann den Rechner ausgeschaltet und in die
> Mittagspause gegangen.

So, und nach der Pause ist die Banane die ich eingegeben habe weg!
Womit wir wieder am Anfang sind:

Der TO meldet sich nicht mehr, bekommt keine 20 Zeilen code 
zusammengeklimpert die sich compilieren lassen, hat keinen Schimmer von 
Normalformen von Datenbanken, ist nicht in der Lage event-driven zu 
programmieren, hat keinen Schimmer wie er die Daten von und in die DB 
bekommt, ...
Gast #6519412
Lesenswert?

Leute Leute,

der TO hat um Hilfe für sein Stück C Quelltext gebeten.

Dass andere Programmiersprachen für ein DBMS besser geeignet sein 
könnten und eine fertige Datenbank Software für so etwas erfunden wurde, 
ist jetzt oft gesagt worden. Solange er auf diesen Zug nicht aufspringt, 
bleibt doch bitte beim Thema des Threads. Und das sind die paar Zeilen 
Code, deren Fehler längst geklärt wurden.

Wir brauchen momentan auch nicht klären, welche Betriebssystem und 
Filesystem besser ist oder ob Ökostrom schneller ist und warum meine 
Schwiegermutter immer mit zu viel Sahne kocht.

Danach hat der TO nicht gefragt.
Gast #6519425
Lesenswert?

Stefan ⛄ F. schrieb:
> Leute Leute,
>
> der TO hat um Hilfe für sein Stück C Quelltext gebeten.
>
> Dass andere Programmiersprachen für ein DBMS besser geeignet sein
> könnten und eine fertige Datenbank Software für so etwas erfunden wurde,
> ist jetzt oft gesagt worden. Solange er auf diesen Zug nicht aufspringt,
> bleibt doch bitte beim Thema des Threads. Und das sind die paar Zeilen
> Code, deren Fehler längst geklärt wurden.
>
> Wir brauchen momentan auch nicht klären, welche Betriebssystem und
> Filesystem besser ist oder ob Ökostrom schneller ist und warum meine
> Schwiegermutter immer mit zu viel Sahne kocht.
>
> Danach hat der TO nicht gefragt.

Aber genau da liegt das Problem. Der TO stellt die falschen Fragen. Sind 
wir doch mal ehrlich, für das was er offensichtlich vor hat, ist C nicht 
unbedingt geeignet. Sobald er weit genug fortgeschritten ist um seine 
Probleme selber zu lösen, wird er auch erkennen das C dafür der falsche 
Weg ist. Also welchen Vorteil hat es jetzt dem TO seine Frage zu 
beantworten und ihn NICHT auf einen sinnvolleren Lösungsansatz zu 
stoßen?
Gast #6519435
Lesenswert?

Tim T. schrieb:
> Also welchen Vorteil hat es jetzt dem TO seine Frage zu
> beantworten und ihn NICHT auf einen sinnvolleren Lösungsansatz zu
> stoßen?

Dann starte halt du einen eigenen thread der genau die Antworten liefert 
die du haben willst. Sollte doch nicht so schwer sein.
Gast #6519443
Lesenswert?

Tim T. schrieb:
> Aber genau da liegt das Problem. Der TO stellt die falschen Fragen. Sind
> wir doch mal ehrlich, für das was er offensichtlich vor hat, ist C nicht
> unbedingt geeignet.

Für mich sieht das nach einer Übungsaufgabe für C aus. Die Aufgabe soll 
in C gelöst werden ohne externe Hilfsprogramme/Datenbanken.

Nachdem er eine einfache DB in C programmiert hat, wird er den Sinn und 
Nutzen einer MariaDB viel besser verstehen.

heute haben wir eher das Problem, dass Leute hoch komplexe Sache 
benutzen, ohne sich dessen bewusst zu sein. Und dann wundern sie sich am 
Ende, wenn sie sich total verzetteln und nichts mehr durchblicken oder 
die Performance nicht im Griff haben.
OP #6520094
Lesenswert?

Bin Anfänger in C
Wollte hier einen Programm zur LAgerverwaltung schreiben kriege aber bei 
meinen struct immer ein Fehler.

Hier mein Code:
#include <stdio.h>


    const int NAMELENGTH = 100;

        typedef strcut Artikel{
        char artikel[Namelength];
        int anzahl:
        }Artikel;


    void ArtikelHinzufuegen(){

    }

    void ArtikelAnzahl(){

    }

    void tabelle(){

    }

    int main(){

    }
#6520103
Lesenswert?

Besorge Dir ein gutes Buch über die Programmiersprache C - oder lass es 
Dir zu Weihnachten schenken.

Der Versuch diese alte Sprache ohne entsprechende Literatur zu lernen 
wird fehlschlagen - C ist NICHT einsteigerfreundlich.

Ich sehe da oben etlich Tippfehler, da spuckt der Compiler gleich ein 
Dutzend Fehler aus.
Gast #6520167
Lesenswert?

An den TO:
Glaubst du ernsthaft, dass du mit solchen Aktionen die Motivation dir zu 
helfen förderst?

Ich bin jedenfalls raus!

Es bleibt nur noch der Tip ein Buch zu kaufen und durchzuarbeiten.
K.A. wie viele Programmiersprachen ich gelernt hab, aber jedesmal hat 
mindestens ein Buch geholfen. Und kapiert hab ich keine einzige Sprache 
innerhalb von 2 Wochen. Es braucht einfach Übung, Übung, Übung.

Und der Wille Probleme selbst zu lösen. Hauptsächlich durch Lesen.
#6520370
Lesenswert?

Taw U. schrieb:
> ich möchte ein Programm erstellen womit ich mein Lager verwalten kann !
> Bin noch Anfänger in C

Wenn es darum geht, eine Programmiersprache zu erlernen, dann hilft Dir 
ein gutes Buch und/oder ein Tutorial zu dieser Sprache weiter. Man fängt 
mit einfachen, kleinen Beispielen an wie dem berühmten "Hello World" und 
arbeitet sich langsam voran. Da man beim Programmieren lernen 
unweigerlich Fehler macht und aus diesen lernt, ist es nicht ratsam 
sofort mit einer komplexen Anwendung zu beginnen. Sonst ist die 
Lernkurve derart steil, dass einem die Lust an der Sache vergeht.
Gast #6520432
Lesenswert?

Sicher das der OP nicht einfach nur ein Troll ist?
Ich meine mit seinen paar daher geworfenen Brocken C ähnlichem Versatz, 
hat er ein vielfaches an Antwortzeilen bekommen und sein Input geht auch 
ansonsten gegen Null.
Gast #6520437
Lesenswert?

Er hat seien Frage ohne jegliche Begründung wiederholt. Ich denke es ist 
klar, dass er uns entweder verarscht oder von den nötigen 
Qualifikationen so weit entfernt ist, dass wir ihm hier nicht helfen 
können.

Wer so unfähig ist, Fragen zu stellen, der kann auch nicht 
programmieren. Da sind Hopfen und Malz verloren.
Gast #6521177
Lesenswert?

wegen einer Mini-"Datenbank", mit vielleicht 10.000 Einträge sich den 
Ärger mit einer SQL-Datenbank etc. antun? Wozu? Einfach mal nachrechnen: 
Gute 100 Bytes pro Artikel man 10.000 sind gerade 1 Megabyte!

Heute hat jeder vergessen, dass man ein paar Daten auch einfach komplett 
in den RAM laden kann. Das ist hochperformant und effizient.

Aber darum geht es ja hier ja gar nicht. 30 Minuten Arbeit und das 
Problem vom Eingangspost ist gelöst:

1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <string.h>
4

5
#define NAMELENGTH 100
6
#define DBSIZE 1000
7
#define DBNAME "database.bin"
8

9
struct Artikel
10
{
11
  char artikel[NAMELENGTH + 1];
12
  int anzahl;
13
};
14

15
struct Artikel db[DBSIZE];
16

17
void fehler(const char *text)
18
{
19
  fprintf(stderr, "Fehler: %s!\n", text);
20
  exit(1);
21
}
22

23
void check_artikel(char *artikel)
24
{
25
  if (!artikel || strlen(artikel) > NAMELENGTH)
26
    fehler("Artikel zu lang");
27
}
28

29
void db_load()
30
{
31
  FILE *input = fopen(DBNAME, "rb");
32
  if (!input)
33
    fehler("Datenbank zum Lesen öffnen fehlgeschlagen");
34

35
  size_t size = fread(db, 1, sizeof(db), input);
36
  if (size != sizeof(db))
37
    fehler("Datenbank nicht komplett geladen");
38

39
  fclose(input);
40
}
41

42
void db_save()
43
{
44
  FILE *output = fopen(DBNAME, "wb");
45
  if (!output)
46
    fehler("Datenbank zum Schreiben öffnen fehlgelschlagen");
47

48
  size_t size = fwrite(db, 1, sizeof(db), output);
49
  if (size != sizeof(db))
50
    fehler("Datenbank nicht komplett geschrieben");
51

52
  fclose(output);
53
}
54

55
void db_clear()
56
{
57
  for (int i = 0; i < DBSIZE; i++)
58
  {
59
    db[i].anzahl = 0;
60
  }
61
}
62

63
int db_size()
64
{
65
  int size = 0;
66
  for (int i = 0; i < DBSIZE; i++)
67
    size += db[i].anzahl ? 1 : 0;
68
  return size;
69
}
70

71
int db_find(char *artikel)
72
{
73
  for (int i = 0; i < DBSIZE; i++)
74
    if (db[i].anzahl > 0 && !strcasecmp(db[i].artikel, artikel))
75
      return i;
76

77
  return -1;
78
}
79

80
void db_add(char *artikel, int anzahl)
81
{
82
  int found = db_find(artikel);
83
  if (found >= 0)
84
  {
85
    db[found].anzahl += anzahl;
86
    return;
87
  }
88

89
  for (int i = 0; i < DBSIZE; i++)
90
    if (db[i].anzahl == 0)
91
    {
92
      strcpy(db[i].artikel, artikel);
93
      db[i].anzahl = anzahl;
94
      return;
95
    }
96

97
  fprintf(stderr, "Datenbank voll!\n");
98
}
99

100
void db_list()
101
{
102
  if (db_size() == 0)
103
  {
104
    printf("Datenbank ist leer.\n");
105
    return;
106
  }
107

108
  printf("Anzahl  :  Artikel\n");
109
  printf("--------:-------------------------------------------------------------\n");
110

111
  for (int i = 0; i < DBSIZE; i++)
112
    if (db[i].anzahl > 0)
113
    {
114
      printf(" %5d  :  %s\n", db[i].anzahl, db[i].artikel);
115
    }
116
}
117

118
int main(int argc, char **argv)
119
{
120
  if (argc < 2)
121
    fehler("Kein Kommando angegeben!\nGültige Kommandos: init, add ANZAHL ARTIKEL, list");
122

123
  const char *cmd = argv[1];
124

125
  if (!strcmp(cmd, "init"))
126
  {
127
    db_clear();
128
    db_save();
129
    printf("Datenbank initialisiert.\n");
130
  }
131
  else if (!strcmp(cmd, "list"))
132
  {
133
    db_load();
134
    db_list();
135
  }
136
  else if (!strcmp(cmd, "add"))
137
  {
138
    if (argc < 3)
139
      fehler("Keine Artikelanzahl angegeben");
140

141
    int anzahl = atoi(argv[2]);
142

143
    if (anzahl <= 0)
144
      fehler("Artikelanzahl zu klein");
145

146
    if (argc < 4)
147
      fehler("Kein Artikel angegeben");
148

149
    char *artikel = argv[3];
150

151
    check_artikel(artikel);
152

153
    if (argc > 4)
154
      fehler("Zu viele Eingaben");
155

156
    db_load();
157
    db_add(artikel, anzahl);
158
    db_save();
159
    printf("Artikel hinzugefügt.\n");
160
  }
161
  else
162
  {
163
    fprintf(stderr, "Unbekanntes Kommando!\n");
164

165
    return 1;
166
  }
167

168
  return 0;
169
}


Viel Spaß!
Gast #6521249
Lesenswert?

Merkwürdig. Hier wird am eigentlichen Problem des Fragenden völlig 
vorbeigeschrieben:

Taw U. schrieb:
> const int NAMELENGTH = 100;
>
>         typedef strcut Artikel{
>         char artikel[Namelength];
>         int anzahl:
>         }Artikel;

Diese große Menge an Schreibfehlern in so wenig Zeilen deutet für mich 
auf Legasthenie hin. Es gibt aber keine Programmiersprache, die 
Flüchtigkeitsfehler in der Dichte verzeiht.

Ich habe 5 Jahre an der Uni C-Programmierung unterrichtet und mußte 
dabei selber lernen, dass es Teilnehmer gibt, die nunmal einfach keine 
Programmiersprache erlernen können.

Sie kommen über ein gewisses Stadium nicht hinaus. Als versierter 
Programmierer muss man lernen, dass auch diese Tätigkeit eben nicht von 
JEDEM zu erlernen ist.

So wie eben auch nicht jeder das perfekte Kalkputzen erlernen kann oder 
6 Sprachen fließend erlernen kann, sondern jeweils ein angeborenes 
Talent mitbringen muss.

Beim Programmieren z.B. ist es eine extreme akribische Genauigkeit 
bereits auf Zeichenebene gepaart mit der Fähigkeit, große Probleme in 
seine kleinsten Teilprobleme zu zerlegen und diese dann Stück für Stück 
fehlerfrei zu lösen.
Gast #6521617
Lesenswert?

Experte schrieb:
> wegen einer Mini-"Datenbank", mit vielleicht 10.000 Einträge sich den
> Ärger mit einer SQL-Datenbank etc. antun? Wozu? Einfach mal nachrechnen:
> Gute 100 Bytes pro Artikel man 10.000 sind gerade 1 Megabyte!

Welchen Ärger? SQLite existiert und gut ist. Sobald man aber dann später 
noch extra Wünsche hat, ist man mit SQL deutlich besser aufgehoben.

> Heute hat jeder vergessen, dass man ein paar Daten auch einfach komplett
> in den RAM laden kann. Das ist hochperformant und effizient.

Soso, lineare Suche und feste Datenfeldgröße aber trotzdem 
hochperformant und effizient?!?

Also wenn man es schon direkt in C macht, kann man auch eben die paar 
Minuten für eine Baumstruktur und dynamische Felder investieren.

> Aber darum geht es ja hier ja gar nicht. 30 Minuten Arbeit und das
> Problem vom Eingangspost ist gelöst:

Ganz großes Kino, also 30 Minuten Arbeit und dann den Bedienkomfort von 
1990.
In 30 Minuten hat man auch eine entsprechende Anwendung in C# mit SQLite 
zusammengeknüppelt.
Gast #6521632
Lesenswert?

Mark B. schrieb:
> Tim T. schrieb:
>> In 30 Minuten hat man auch eine entsprechende Anwendung in C# mit SQLite
>> zusammengeknüppelt.
>
> Als erfahrener Entwickler vielleicht. Der Themenersteller ist aber
> keiner.

Glaube ich nicht, wenn ich mir ansehe wie einfach es mittlerweile ist 
mal eben eine Komponente wie SQLite anzubinden und mit entsprechenden 
Steuerelementen zu verknüpfen, ist da wirklich nicht viel Können 
erforderlich. Ok, minimales Einarbeiten in SQL wäre notwendig, aber auch 
das dauert nicht lange.

Denke aber der TO ist eh ein hoffnungsloser Fall, bescheidene bis nicht 
vorhandene C Kenntnisse gepaart mit fehlender Eigeninitiative, 
Genauigkeit und schriftlicher Ausdrucksfähigkeit.
(Firma: Zombieland) #6521812
Lesenswert?

Experte schrieb:
> Aber darum geht es ja hier ja gar nicht. 30 Minuten Arbeit und das
> Problem vom Eingangspost ist gelöst
gut :-)
von mir gab's eine positive Lese-Wertung; wie man hier negativ werten 
kann, bleibt mir ein Rätsel.
Das Programm kann man auch anderweitig nutzen; besten Dank an dieser 
Stelle von mir
... vom TO hört man ja leider nichts mehr.
#6527766
Lesenswert?

Ich hab gard mal deinen Code getestet und bemerkt dass bei dir die 
Eingabe des Kommandos fehlt. Beim complimieren erscheint direkt "Fehler: 
Kein Kommando angegeben!", da man nicht eingeben kann:)


btw glaube nicht dass der/die T O deinen Code ohne Kommentare versteht.
#6527772
Lesenswert?

Experte schrieb:
>
> Aber darum geht es ja hier ja gar nicht. 30 Minuten Arbeit und das
> Problem vom Eingangspost ist gelöst:

>
> int main(int argc, char **argv)
> {
>   ...//Kann nicht alles markieren//...
}

Ich hab gard mal deinen Code getestet und bemerkt dass bei dir die
Eingabe des Kommandos fehlt. Beim complimieren erscheint direkt "Fehler:
Kein Kommando angegeben!", da man nichts eingeben kann:)


btw glaube nicht dass der/die Taw deinen Code ohne Kommentare versteht.
(Firma: Zombieland) #6527801
Lesenswert?

Luyin D. schrieb:
> Ich hab gard mal deinen Code getestet und bemerkt dass bei dir die
> Eingabe des Kommandos fehlt. Beim complimieren erscheint direkt "Fehler:
> Kein Kommando angegeben!", da man nichts eingeben kann:)
>
> btw glaube nicht dass der/die Taw deinen Code ohne Kommentare versteht.
bei mir funktioniert das Programm von 'Experte' bestens - ein wenig 
Ahnung sollte man natürlich schon haben.
Mir hat das Programm genutzt, dafür nochmals vielen Dank an Experte :-)
#6527918
Lesenswert?

Also bei mir funktioniert das Programm von 'Experte' auch nicht, kann 
vielleicht jemand helfen ? Also doch das Funktioniert ich kann aber kein 
Kommando auswählen.
Es erscheint immer :
Fehler: Kein Kommando angegeben!
Gültige Kommandos: init, add ANZAHL ARTIKEL, list!
Gast #6528014
Lesenswert?

Wado U. schrieb:
> Es erscheint immer :
> Fehler: Kein Kommando angegeben!

Das dient dann als Beweis dafür, dass du die Antworten hier nicht mal 
liest.
Kein C können ist das Eine. Nicht lesen wollen das Andere.

Ich steh also zu dem Posting von mir:
Beitrag "Re: Fehlersuche in C"

Und zu allen Anderen natürlich auch. Komisch, aber man kann an der Art 
und Weise wie eine Fragestellung aufbereitet wird erkennen ob es pure 
Zeitverschwendung wird dem TO zu antworten.
Wenn jeder nur ein wenig über 1 Minute verschwendet hat hier zu 
antworten, dann sind wir schon bei 1 1/2 Stunden.
Der TO konnte das Urspungsposting in 30 Sekunden hinrotzen.
Moderator #6528542
Lesenswert?

@Taw alias Wado alias Luyin:

Nach den Nutzungsbedingungen ist die Beteiligung an einer Diskussion
unter verschiedenen Namen nicht zulässig, schon gar nicht in der Weise,
wie du es hier tust.

Außerdem: Du hast in den letzten Tagen mindestens 11 Threads mit
Anfängerfragen zu C gestartet. Einige davon scheinst du bereits
vergessen zuhaben. Wenn du wirklich die Absicht hast, C zu lernen (was
ich mittlerweile stark bezweifle), dann konzentriere dich auf ein
einzelnes Problem, versuche dieses (ggf. mit Hilfe des Forums) zu
lösen, gib eine positive Rückmeldung, sobald du erfolgreich bist und
starte erst dann deinen nächsten Thread.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.