[GELÖST] leeres Array in C?

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: [GELÖST] leeres Array in C?

BeitragDi, Sep 20, 2011 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Ich programmiere zurzeit mit C und wollte wissen, wie man ein leeres Array erstellt, da z.b.: Code: [AUSKLAPPEN]
int iWichtigesArray[];
nicht funktioniert...

Gibt es überhaupt ein leeres array in C? Google gab nur das problem in c++ aus...

mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am So, Sep 25, 2011 10:56, insgesamt einmal bearbeitet

BtbN

BeitragDi, Sep 20, 2011 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Welchen sinn hätte ein leeres array? Mal abgesehen davon kennt C keine arrays, sind alles einfach nur speicher bereiche.
 

Meik

BeitragDi, Sep 20, 2011 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
ka mehr von C aber schonmal

int[] var = new int { 1,2,3,4 };

probiert?
 

CO2

ehemals "SirMO"

BeitragDi, Sep 20, 2011 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal danke für die antworten.

@ BtbN:
Ich wollte ein Consolen-rechnungserstellungsprogramm schreiben. dazu soll zuerst eine beliebige anzahl von Produkten getätigt werden (deshalt leeres array Wink ). Also der User gibt ein, z.b.: Code: [AUSKLAPPEN]
Bezeichnung: Kartoffelpuffer
Menge: 20
Preis: 1.10

So, und das wird solange gemacht, bis er als Bezeichnung "end" eingibt. Da ich vorher nicht weiß, wieviele Artikel der User eintragen will, und C nicht Objekt Orientiert ist, muss ich das über arrays lösen.

@ Meik:
Das Funktioniert leider nicht... zumal ja nicht das integer als array deklariert werden soll, sondern eine variable Wink

mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragDi, Sep 20, 2011 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Besorg' dir am besten ein Buch zum Thema, wenn du selbst in den Weiten des Internets nicht fündig wirst.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Noobody

BeitragDi, Sep 20, 2011 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Arrays in C funktionieren so nicht. Du kannst sie nur mit einer festen Grösse, die zur Kompilierzeit bekannt ist, erstellen. Die Grösse zur Laufzeit verändern geht nicht; dafür brauchst du malloc.

CO2 hat Folgendes geschrieben:
Das Funktioniert leider nicht... zumal ja nicht das integer als array deklariert werden soll, sondern eine variable

....ich schliesse mich dann mal Xeres mit dem Buchvorschlag an.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Jo0oker

BeitragDi, Sep 20, 2011 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn mich nicht alles täuschte kannst du doch für deinen Zweick auf einfach structs nehmen?

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!
 

CO2

ehemals "SirMO"

BeitragDi, Sep 20, 2011 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, auch hier: Danke für die Antworten!

@ Xeres:
Ich habe mir bereits ein Buch von Galileo Computing gekauft, dort sind aber auch nur Arrays mit vordefinierter Größe drin.

Noobody:
Hab ich mir schon fast gedacht... - Apropos: was ein wenig seltsam ist, das wenn man ein leeres Array vor der main-Funktion deklariert, das es dann funktioniert (Der debugger gibt keinen Fehler aus... ) Zur Probe Folgende Codes:
Code: [AUSKLAPPEN]
#include <stdio.h>
#include <stdlib.h>

int iArray[];

int main()
{
    printf("Hello world!\n");
    return 0;
}
kein Fehler

Code: [AUSKLAPPEN]
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int iArray[];
    printf("Hello world!\n");
    return 0;
}
Fehler

@ Jo0oker:
Gibt es denn schon structs in C? Ist das nicht schon OO?

Eine allg. Frage noch: Kennt sich jemand von euch mit CodeBlocks aus? Wo kann man da einstellen, das die executeable auch nach codeende noch besteht? Weil ich habe das mal irgendwo umgestellt, und nun muss ich in jedem programm irgendeine eingabe machen lassen (scanf), damit das programm offen bleibt und ich das resultat sehen kann...

mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Jo0oker

BeitragDi, Sep 20, 2011 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Wo ist das Problem eine eingabe vom Benutzer zu fordern bevor das Programm schließt?

Hier: http://home.htw-berlin.de/~jun...truct.html
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

Thunder

BeitragMi, Sep 21, 2011 6:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Structs gibt es in C, sie sind nicht OOP. Btw: Was wuerde es aendern wenn C objektorientiert waere? Dynamische Felder muesstest du dir trotzdem selbst bauen.
Ich koennte mir vorstellen, dass die Deklaration des Int-Arrays vor der main-Funktion deshalb funktioniert, weil der Compiler davon ausgeht, dass die darauffolgenden Werte in der .data-Sektion der ausfuehrbaren Datei als Elemente im Array angesehen werden sollen (das so zu definieren ist fuer Anwendungen komplett unnoetig).
Wie Noobody sagte brauchst du einen Zeiger, malloc, realloc und free. Auf www.cplusplus.com kannst du dir auch Informationen holen (wenn du dein Buch gerade nicht hast), da sind die Funktionen der libc sehr gut dokumentiert.


PS: Entschuldigt die ausgeschriebenen Umlaute. Bin im Ausland.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

CO2

ehemals "SirMO"

BeitragMi, Sep 21, 2011 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antworten

@ JoOoker:
Zitat:
Wo ist das Problem eine eingabe vom Benutzer zu fordern bevor das Programm schließt?
Das ist ein wenig nervig, zumal wenn der user einen string eingibt und ein Int erwartet wird, das es dann eine Fehlermeldung gibt. Wink
Irgendwo konnte man das aber einstellen, und dann wurde die Console offen gelassen, und solche daten wie Laufzeit, etc. unter der ausgabe ausgegeben.

Danke für den Link, dachte, das C das noch nicht kann...

@ Thunder:
Zitat:
Was wuerde es aendern wenn C objektorientiert waere?
- Dann wäre es C++ Wink
Danke für den Link. Wink


@ Topic:
So, habe nun ein wenig gecoded und rausgekommen ist das:
Code: [AUSKLAPPEN]
#include <stdio.h>
#include <stdlib.h>

int main(void) //HauptFunktion!
{
    int iArtikelanzahl; //Anzahl Artikel
    printf("Wieviele Artikel wollen sie eingeben? ");
    scanf("%d", &iArtikelanzahl); //User gibt an, wieviele Artikel angegeben werden sollen
    float dEinzelpreis[iArtikelanzahl]; //Einzelpreis Array mit Artikelanzahl als Größenangabe
    float dGesamtpreis[iArtikelanzahl]; //Gesamtpreis Array mit Artikelanzahl als Größenangabe
    char szArtikelbezeichnung[iArtikelanzahl][100]; //Bezeichnungs Array mit Artikelanzahl als Größenangabe und 100 Zeichen begrenzung
    int iMenge[iArtikelanzahl]; //Menge der Artikel als Array mit Artikelanzahl als Größenangabe
    float dRechnungsbetrag; //Der spätere Rechnungsbetrag
    int iTest; //Lauf-Variable 1. For Schleife
    float dMwst; //Kosten der Mehrwertsteuer
    int iAusgabe; //Lauf-Variable 2. For Schleife

    for(iTest = 1; iTest <= iArtikelanzahl; iTest++) //Solange druchlaufen, wie iTest <= iArtikelanzahl (iTest = 0)
    {
        printf("\nGeben sie die ArtikelBezeichnung an: ");
        scanf("%s", szArtikelbezeichnung[iTest]); //Eingabe Bezeichnung Artikel
        fflush(stdin);
        printf("Geben sie den ArtikelPreis an: ");
        scanf("%f", &dEinzelpreis[iTest]); //Eingabe Einzelpreis Artikel
        fflush(stdin);
        printf("Geben sie die Menge an: ");
        scanf("%d", &iMenge[iTest]); //Eingabe Menge Artikel
        fflush(stdin);

        dGesamtpreis[iTest] = dEinzelpreis[iTest] * iMenge[iTest]; //Gesamtpreis ausrechnen
        dMwst = dMwst + (dGesamtpreis[iTest] / 100 * 19); //Mehrwertsteuer ausrechnen (19%)

        printf("Arikel registriert!\n");
    }
    printf("\n\n%-10s%-20s%-20s%-20s\n\n\n", "Menge", "Bezeichnung", "Einzelpreis", "Gesamtpreis"); //Kopf der Tabelle
    for(iAusgabe = 1; iAusgabe < iTest; iAusgabe++) //Solange durchlaufen, wie iAusgabe < iTest
    {
        printf("%-10d", iMenge[iAusgabe]); //Menge des entsprechenden Artikels ausgeben
        printf("%-20s", szArtikelbezeichnung[iAusgabe]); //Bezeichnung des entsprechenden Artikels ausgeben
        printf("%-20.2f", dEinzelpreis[iAusgabe]); //Einzelpreis des entsprechenden Artikels ausgeben
        printf("%-20.2f", dGesamtpreis[iAusgabe]); //Gesamtpreis (Einzelpreis * Menge) des entsprechenden Artikels ausgeben
        printf("\n\n"); //Eine Leerzeile
        dRechnungsbetrag = dRechnungsbetrag + dGesamtpreis[iAusgabe]; //Rechnungsbetrag ausgeben
    }
    dRechnungsbetrag = dRechnungsbetrag + dMwst;
    printf("\n%-10s%-40s%-20.2f", "", "zuzueglich 19% Mwst.", dMwst); //Mehrwertsteuer ausgeben
    printf("\n-------------------------------------------------------------\n"); //TrennLinie

    printf("%-10s%-40s%-20.2f\n\n", "", "Rechnungsbetrag:", dRechnungsbetrag); //Rechnungsbetrag ausgeben funktioniert jetzt korrekt
    return 0; //0 returnen
}

Ich habe es nun so gemacht, das der user vorher festlegt, wieviele artikel er eingeben will, und daraus dann die arrays gebildet werden.
Das Struct habe ich nicht verwendet, da dies hier einfach zu viel wäre. Dafür würde es sich nicht lohnen ein struct zu entwerfen Wink nichts desto trotz danke ich dir für den vorschlag Wink

mfG,
CO2

mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group