Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen
-
Gude eine Frage wie kann ich die Position meines C Arrays um eins erhöhen ohne eine
for- Schleife zu benutzen ich habe es in der Zeile 8 codiert:
ich hab es auch so versucht: c_array [+1];
oder auch so c_array [array_lesen+1];
ist das falsch oder richtig?int array_einlesen; cout << "Bitte füllen Sie ihre Felder: " << endl; //C-Array wird gefüllt cin >> array_einlesen; c_array[0] = array_einlesen; c_array[]++ cout << "array: " << c_array[0] << endl;
-
@adii950 Was meinst du mit Position?
Nach der Definition eines Array liegt die Größe und Position im Speicher fest.
Wenn du den Index (die Angabe zwischen den [ ] ) meinst, kannst du den in einer Variablen halten und diese auch verändern.
Bei c_array [+1]; ist das +1 ein Integerliteral und entspricht 1. Also greifst du auf das 2. Element im Array zu.
Bei c_array [array_lesen+1]; greifst du auf das folgenden Element von c_array [array_lesen]; zu, ohne die Variable array_lesen zu verändern-
-
This post is deleted!
-
Du kannst das Array nicht 'von [0] auf [1] setzen'.
Du kannst die Arrayelemente mitc_array[0] c_array[1] c_array[2]
usw. adressieren, oder eben mit:
int a = 0; c_array[a] ...
und dann kannst Du bei Bedarf den Wert von a verändern, zB mit
++a;
-
@Belli achso verstehe dann wird es automatisch in das array gefüllt?
ohne die Positionen zu ändern?
Also ich will meine Eingabe jedes mal wiederholen und das in array speichern eben ohne die for schleife ich hoffe das es jetzt Verständnisvoll war
-
@adii950 sagte in Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen:
Also ich will meine Eingabe jedes mal wiederholen und das in array speichern eben ohne die for schleife
Das Konstrukt für Wiederholung ist die Schleife.
Ob das nunfor
oderwhile
ist, spielt keine Rolle.Rekursion ist noch eine Möglichkeit, aber selten sinnvoll einsetzbar.
ich hoffe das es jetzt Verständnisvoll war
Für mich nicht.
-
@adii950: Du möchtest also ein dynamisches Array (das man bei Bedarf vergrößern kann). So etwas (wie z.B.
std::vector
in C++) gibt es standardmäßig nicht in der C-Library.Du könntest selber mittels
malloc
undrealloc
so eine Datenstruktur erstellen, einfacher (bes. für Anfänger) ist jedoch eine maximale Größe des Arrays vorzugeben und einen Zähler für die aktuelle Größe benutzen.
-
@Th69 sagte in Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen:
Du möchtest also ein dynamisches Array (das man bei Bedarf vergrößern kann).
@adii950:
Wenn das stimmt, dann benutze std::vector
-
@Belli: Ich bin irgendwie davon ausgegangen, daß er nur C macht (wegen "C-Array"), aber jetzt sehe ich, daß er ja C++ (
cout
,cin
) benutzt - war wohl noch etwas früh für mich heute morgen?!?
-
Mir ist noch gar nicht klar, was er wirklich will
-
@Th69 sagte in Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen:
Ich bin irgendwie davon ausgegangen, daß er nur C macht (wegen "C-Array"), aber jetzt sehe ich, daß er ja C++ (
cout
,cin
) benutzt.Wird wohl - wie so oft - am Lehrer liegen.
@Belli sagte in Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen:
Mir ist noch gar nicht klar, was er wirklich willWird wohl ein XY Problem sein.
https://de.wikipedia.org/wiki/XY-Problem?wprov=sfti1
-
@DirkB hmm
okay also ich hab das jetzt geschafft du hattest recht gehabt ich habe jetzt einen Counter benutzt welches immer hoch zählt sobald in dem array ein Wert speichere danach wird das Menü wieder angezeigt und dann wenn ich wieder den Buchstaben 'i' drücke dann wird der nächste wert in Postion [1] gespeichert und dann wird wieder der Counter um eins erhöht und der nächste wert in Position 2 und immer so weiter schau mal so habe ich es jetzt gelöst: hoffe das es jetzt verständlich war
//Variable erstellen char eingabe; int array_einlesen; int counter = 0; //Array erstellen von 0 bis 4 int c_array [5] = {0}; //do-while schleife damit die eingabe von menü eingelesen wird do{ //menue erstellen: cout << "Eingabe eines neuen Werts mit einem kleinen 'i' oder mit einem grossen 'I' " << endl; cout << "Gibt die Anzahl der belegten Felder aus mit einem kleinen 's' oder mit einem grossen 'S' " << endl; cout << "Gibt alle belegten Felder aus mit einem kleinem 'o' oder mit einem grossem 'O " << endl; cout << "Beendet das Programm mit einem kleinem 'q' oder mit einem grossen 'Q' " << endl; cout << "Bitte geben Sie ihre Eingabe ein: " << endl; cin >> eingabe; //menue eingaben: switch (eingabe){ //Eingabe eines neuen Werts //ein kleines i oder ein großes I wird hier Abgefangen case 'i': case 'I': { cout << "Bitte füllen Sie ihre Felder: " << endl; //C-Array wird gefüllt cin >> array_einlesen; c_array[counter] = array_einlesen; counter++; } break; //Gibt die Anzahl der belegten Felder aus. case 's': case 'S':{ cout << "array " << c_array[0] << " " << c_array[1] << endl; /*for (int i = 0; i < 5; ++i) { cout << "mein array Ausgabe: " << c_array[i] << endl; }*/ /* for (int i = 0; i < 5; i++) { if(c_array[i] == 0){ cout << "Das array ist nicht voll: " << endl; } } //Ausgabe der belegten felder cout << "Es sind: " << c_array << " Felder belegt " << endl;*/ } break; //Gibt alle belegten Felder aus. case 'o': case 'O':{ } break; //Löscht das erste Element (Feld 0) und verschiebt alle Elemente um eine // Stelle nach vorn. Es wird eine Fehlermeldung ausgegeben, falls es nichts //zu löschen gibt. case 'd': case 'D':{ } break; //Programm beenden case 'q': case 'Q':{ break; } } }while(eingabe != 'q' || eingabe != 'Q'); return 0; }
-
@adii950 sagte in Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen:
eingabe != 'q' || eingabe != 'Q'
Gehen wir mal mögliche Eingaben durch:
Sei eingabe 'a' dann ist ('a' != 'q' || 'a' != 'Q') = (1 || 1) = 1 (wahr)
Sei eingabe 'q' dann ist ('q' != 'q' || 'q' != 'Q') = (0 || 1) = 1 (wahr)
Sei eingabe 'Q' dann ist ('Q' != 'q' || 'Q' != 'Q') = (1 || 0) = 1 (wahr)Der Ausdruck ist immer wahr - kein Programmende.
-
@adii950
Nochmal:
Warum benutzt Du keinen vector?
Oder, falls Du tatsächlich irgendwann das erste Element entfernen und alle anderen aufrücken lassen willst, noch besser eine queue?
-
@Belli naja weil in der Aufgabe steht ich darf nur ein c-Array benutzten darf
-
@adii950 sagte in Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen:
weil in der Aufgabe steht ich darf nur ein c-Array benutzten darf
Ich finde den lachenden Smiley unpassend. Diese hier wären besser passend:
-
@DirkB ja stimmt hab es geändert danke dir
-
Hi, der Thread ist jetzt ja schon ein paar Tage alt. Aber: ist es wirklich so gedacht, immer nur ein Feld zu befüllen und nicht alle 5 Felder auf einmal? In deinem @adii950 Eingangspost steht ja immerhin "Bitte füllen Sie ihre Felder". Also, was genau steht in deiner Aufgabe?
Seid C++17 können wir das Einlesen, auch bei einem C-Array ohne eigene
For-Loop
lösen:#include <iostream> #include <algorithm> int main() { int c_array[5] = { 0 }; //lambda to read an int from cin auto read = [] { int number; std::cin >> number; return number; }; //fill array without manual for loop std::generate(std::begin(c_array), std::end(c_array), read); //just to show that it worked auto print = [](const int& n) { std::cout << " " << n; }; // with another alternative for a typical for-loop std::for_each(std::begin(c_array), std::end(c_array), print); }