variablen Inkrementieren
hallo,
ich hab das problem das ich innerhalb einer do-while einen wert einlesen muss und diesen dann an eine variable übergeben muss. jetzt weis ich nicht, wie ich das machen kann, das sich bei jedem durlauf der do-while der variablen name ändert. weil sonst wird ja immer die variable aus dem vorherigen durchgang überschrieben.
danke für die hilfe
ich hab das problem das ich innerhalb einer do-while einen wert einlesen muss und diesen dann an eine variable übergeben muss. jetzt weis ich nicht, wie ich das machen kann, das sich bei jedem durlauf der do-while der variablen name ändert. weil sonst wird ja immer die variable aus dem vorherigen durchgang überschrieben.
danke für die hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 28866
Url: https://administrator.de/contentid/28866
Ausgedruckt am: 25.11.2024 um 23:11 Uhr
15 Kommentare
Neuester Kommentar
Hi,
es ist zwar schon eine Weile her, daß ich programmiert habe,
aber wenn Du wirklich alle berechneten oder erstellten Werte,
nachdem die Schleife durchgelaufen ist, zur Weiterverabeitung benötigst,
dann solltest Du die Werte in einem Array bzw. in einer Liste speichern,
diese kannst Du dann in einer weiteren Schelife problemlos wieder
auslesen.
Gruß
cykes
es ist zwar schon eine Weile her, daß ich programmiert habe,
aber wenn Du wirklich alle berechneten oder erstellten Werte,
nachdem die Schleife durchgelaufen ist, zur Weiterverabeitung benötigst,
dann solltest Du die Werte in einem Array bzw. in einer Liste speichern,
diese kannst Du dann in einer weiteren Schelife problemlos wieder
auslesen.
Gruß
cykes
Ich weiss jetzt nicht wie es in deinem Fall aussieht, weil ich kein Experte in C bzw. C++ bin, aber in Java gibt es so was wie "List". Da braucht man nicht das Objekt mit einem gewissen Initialwert, wie es bei Arrays der Fall ist, zu initialisieren sondern durch die Methode add() kann man einen Wert in der Liste des Objekts hinzufügen.
Moin Leutz
Ich weis zwar nicht ob ich die Frage richtig verstehe!
Aber ich versuche es mal.
Du hast also eine DO WHILE Schleife, die in irgendeiner Weise ein Wert "W" produziert.
Dieser Wert W soll jetzt aber gegen überschreiben gesichert werden, so das du also eine Chronik des Wertes W bekommst oder?
Wenn das so ist, brauchst du
Hinweis zu Bereichen / Variablen
Jede normale Variable ist ein Bereich mit nur einem Wert
Ein Bereich kann aber eine Variable mit mehreren Werten haben
(int P) ist eigentlich das gleiche wie int P
im groben sollte das dann wie folgt aussehen
Variablen deklarieren ( nur Beispiele )
P als Datentyp definieren und mit 0 deklarieren. ( int P=0 )
Q als Datentyp definieren und mit 0 deklarieren. ( int Q=0 )
W als Datentyp definieren ( int W=0 )
A[x] als Datentyp definieren. ( int A[99] ) hier können nun 100 Werte gespeichert werden
Program Begin
Do
P++ hier wird die Chronologische Position P um 1 erhöht
While
Program Ende
Q ist eigentlich P. Ich denke aber P solltest du zur eigenen Sicherheit nur vom Programm ändern lassen. Dann kannst du dir nicht ausversehen deine " Werte Chronik " überschreiben.
Arbeite lieber mit Q zum auslesen und mit P zum schreiben. Wenn du mit Q falsche Werte liest ist das nicht so schlimm als würdest du mit P, falsche Stellen überschreiben. 
Mfg Metzger
Ich weis zwar nicht ob ich die Frage richtig verstehe!
Aber ich versuche es mal.
Du hast also eine DO WHILE Schleife, die in irgendeiner Weise ein Wert "W" produziert.
Dieser Wert W soll jetzt aber gegen überschreiben gesichert werden, so das du also eine Chronik des Wertes W bekommst oder?
Wenn das so ist, brauchst du
- ein/(zwei) Positionsvariable P/(Q) P ist Position x-ter Chronik Wert,
- Array A[x] mit der Anzahl x Speicherstellen.
- eine Wertevariable W
Hinweis zu Bereichen / Variablen
Jede normale Variable ist ein Bereich mit nur einem Wert
Ein Bereich kann aber eine Variable mit mehreren Werten haben
(int P) ist eigentlich das gleiche wie int P
im groben sollte das dann wie folgt aussehen
Variablen deklarieren ( nur Beispiele )
P als Datentyp definieren und mit 0 deklarieren. ( int P=0 )
Q als Datentyp definieren und mit 0 deklarieren. ( int Q=0 )
W als Datentyp definieren ( int W=0 )
A[x] als Datentyp definieren. ( int A[99] ) hier können nun 100 Werte gespeichert werden
Program Begin
Do
W = berechneter Wert hier wird W mit dem Berechteten Wert belegt
Q = P Q wird mit P belegt.
A[P] = W hier wird die Chronologische Position P im Array A mit Wert W belegt
P++ hier wird die Chronologische Position P um 1 erhöht
While
ausgabe wert = A[Q] // hier wird die Chronologische Position Q im Array A abgefragt
Program Ende
Q ist eigentlich P. Ich denke aber P solltest du zur eigenen Sicherheit nur vom Programm ändern lassen. Dann kannst du dir nicht ausversehen deine " Werte Chronik " überschreiben.
Arbeite lieber mit Q zum auslesen und mit P zum schreiben. Wenn du mit Q falsche Werte liest ist das nicht so schlimm als würdest du mit P, falsche Stellen überschreiben. 
Mfg Metzger
----------------------------------------------------------------------------------------------------------------
do
{
printf ("Bitte Nummer des
einzulesenden Digitaleingangs angeben z.b.
für 2^1 geben Sie 1 ein:")
scanf ("%s", &w);
array[p]=w;
clrscr();
printf ("Wollen Sie noch einen
Digitalen Eingang einlesen? j/n")
scanf ("%c", &janein);
p++;
}
while (janein = j);
so währe das dann in meinem falle.
ist das so richtig ?
und ich kann dann auf die daten im array
wieder zugreifen wie folgt?
if (array= 1)
{
...
}
Syntaxfehler, du meintest wohl eher:do
{
printf ("Bitte Nummer des
einzulesenden Digitaleingangs angeben z.b.
für 2^1 geben Sie 1 ein:")
scanf ("%s", &w);
array[p]=w;
clrscr();
printf ("Wollen Sie noch einen
Digitalen Eingang einlesen? j/n")
scanf ("%c", &janein);
p++;
}
while (janein = j);
so währe das dann in meinem falle.
ist das so richtig ?
und ich kann dann auf die daten im array
wieder zugreifen wie folgt?
if (array= 1)
{
...
}
if (array==1)
{
...
}
Und bei dem while würde es auch mehr Sinn machen, das 2. Gleichheitszeichen zu setzen. Kennst du den Unterschied ?
Hast wohl noch nicht viel mit C++ gemacht ?
Und du musst den Array vorher initialisieren und p einen Startwert(0) geben, sonst müsste es funktionieren. Hast es noch nicht getestet ?
Moin chriss-330,
das wird vermutlich daran liegen, dass Du den Array-Elementen keinen Anfangswert zugewiesen hast und da eben Zufallszahlen drinstehen.
Wie hast Du denn die Variable "array" definiert? Mit "int array[16];"?
Wenn ich Deinen (geringfügig angepassten) Schnipsel nur mit einer "int array[16];"-Initalisierung und ohne Wertzuweisung laufen lasse und mir die 16 Arraywerte anzeigen lasse, nachdem ich nur 3 tatsächlich eingegeben habe, kommt bei mir so etwas raus:
( Die Prefixe "! 4 CheckVolt(..." oder "= 5 CheckVolt(..." habe ich mir nur anzeigen lassen, um zu sehen, ob er die "richtigen" if..else..Zweige ansteuert.)
Oben kannst Du sehen, dass in den Array-Elementen 3 bis 15, denen ich nichts zugewiesen habe, halt irgendeine Grütze drinsteht.
Wenn du am Anfang zum Beispiel alle array-Werte mit "-1" oder "4711" initialisierst, kann da nichts schiefgehen.
Bsp:
Gruß Biber
das wird vermutlich daran liegen, dass Du den Array-Elementen keinen Anfangswert zugewiesen hast und da eben Zufallszahlen drinstehen.
Wie hast Du denn die Variable "array" definiert? Mit "int array[16];"?
Wenn ich Deinen (geringfügig angepassten) Schnipsel nur mit einer "int array[16];"-Initalisierung und ohne Wertzuweisung laufen lasse und mir die 16 Arraywerte anzeigen lasse, nachdem ich nur 3 tatsächlich eingegeben habe, kommt bei mir so etwas raus:
Bitte Nummer des einzulesenden Digitaleingangs angeben -
z.b. fuer 2^1 geben Sie 1 ein:
Geben Sie 99 zum Starten / keinen weiteren Eingang ein.
Digitaleingang # 1:... 5
Digitaleingang # 2:... 6
Digitaleingang # 3:... 7
Digitaleingang # 4:... 99
--
Eingegebene Werte : 3
--
wert von array[ 0] ist 5
wert von array[ 1] ist 6
wert von array[ 2] ist 7
wert von array[ 3] ist 2013314410
wert von array[ 4] ist 2293728
wert von array[ 5] ist 2013314410
wert von array[ 6] ist 2013471312
wert von array[ 7] ist -1
wert von array[ 8] ist 2293624
wert von array[ 9] ist 2293728
wert von array[10] ist 2013314410
wert von array[11] ist 2013471392
wert von array[12] ist -1
wert von array[13] ist 2293624
wert von array[14] ist 2013300854
wert von array[15] ist 4274392
! 0 CheckVolt(SKS_DA_3.00, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
! 1 CheckVolt(SKS_DA_3.01, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
! 2 CheckVolt(SKS_DA_3.02, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
! 3 CheckVolt(SKS_DA_3.03, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
! 4 CheckVolt(SKS_DA_3.04, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
= 5 CheckVolt(SKS_DA_3.05, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);
= 6 CheckVolt(SKS_DA_3.06, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);
= 7 CheckVolt(SKS_DA_3.07, GROUND, Umin= 23 V, Umax= 25 V,Tmeas= 20 ms);
! 8 CheckVolt(SKS_DA_3.08, GROUND, Umin= 0 V, Umax= 10 V,Tmeas= 20 ms);
...
Oben kannst Du sehen, dass in den Array-Elementen 3 bis 15, denen ich nichts zugewiesen habe, halt irgendeine Grütze drinsteht.
Wenn du am Anfang zum Beispiel alle array-Werte mit "-1" oder "4711" initialisierst, kann da nichts schiefgehen.
Bsp:
#define MAXLEN_MYARRAY 16
// bool ascan( int a, int toScan4);
// bool ascan( int a, int toScan4, bool withprintf);
int main (){
int w=0, p=0, pmax=-1, array[MAXLEN_MYARRAY];
<b>for (p=0; p<MAXLEN_MYARRAY; p++) array[p]=-1;</b> // <--------- Initialisieren mit -1 (oder sonst einem Wert)
printf ("Bitte Nummer des einzulesenden Digitaleingangs angeben - \n z.b. fuer 2^1 geben Sie 1 ein: \n");
printf ("Geben Sie 99 zum Starten / keinen weiteren Eingang ein. \n");
for (p=0;p<MAXLEN_MYARRAY;p++){
printf( "Digitaleingang #%2d:... ", p+1); scanf ( "%d", &w);
if ( w<0 || (w >= MAXLEN_MYARRAY -1 && w !=99)) {
printf(">>Fehleingabe! Wertebereich 0...15\n"); p--; continue;
}
if (w == 99) break;
// if (ascan( array, w, false)) {
// printf(">>Den Wert %2d hatten wir schon..try again..\n", w);
// p--; continue;
// }
array[p]=w;
pmax++;
}
....