[GELÖST] leeres Array in C?
Übersicht

CO2ehemals "SirMO"Betreff: [GELÖST] leeres Array in C? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Welchen sinn hätte ein leeres array? Mal abgesehen davon kennt C keine arrays, sind alles einfach nur speicher bereiche. | ||
Meik |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ka mehr von C aber schonmal
int[] var = new int { 1,2,3,4 }; probiert? |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 ![]() 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 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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>
kein Fehler
#include <stdlib.h> int iArray[]; int main() { printf("Hello world!\n"); return 0; } Code: [AUSKLAPPEN] #include <stdio.h>
Fehler
#include <stdlib.h> int main() { int iArray[]; printf("Hello world!\n"); return 0; } @ 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() 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++ ![]() Danke für den Link. ![]() @ 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 ![]() ![]() 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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group