C / Variable nur bis zur ersten else Bedingungen hochzählen

tung15

Cadet 4th Year
Registriert
Aug. 2017
Beiträge
68
Hey CB Forum,

ich bin gerade dabei einen Schrittbot in C zu entwickeln. Der Code sieht wie folgt aus:

#include <stdio.h>

void main()
{ int i;
int var1;
int var2;
char wand[2];
char erstedrehung;



for (i = 0; i <= 10; i++)
{
printf("Ist die Wand da?\n");
scanf("%s",wand);

if (wand[0] == 'n' || wand[0] == 'N')
{
printf("Schritt\n");
var1++;
}else
{
if (wand[0] == 'y' || wand[0] == 'Y')
{
printf("Drehung\n");
i=0;
}
}
}
}


jetzt war mein Ziel, dass ich nur die Schritte bis zur ersten Drehung in eine Variable abspeicher. Bzw. dann später nochmal von der 2. bis zur 3. Drehung in eine andere Variable abspeicher. Ich hab das gefühl ich muss das ganze komplett anders angehen und mit google suche finde ich nicht wirklich dass was ich brauche. Könnte mir jemand einen Ansatz geben, das wäre super.

VG Tung
 
C:
#include <stdio.h>

void main(){
    int i;
    int var1;
    int var2;
    char wand[2];
    char erstedrehung;

    for (i = 0; i <= 10; i++) {
        printf("Ist die Wand da?\n");
        scanf("%s",wand);

        if (wand[0] == 'n' || wand[0] == 'N') {
            printf("Schritt\n");
            var1++;
        } else {
            if (wand[0] == 'y' || wand[0] == 'Y') {
                printf("Drehung\n");
                i=0;
            }
        }
    }
}
 
Die FOR Schleife geht auch ohne Increment der Variable. kannst dann in deinen Bedingungen zählen wenn du willst.
 
was spricht gegen ein weiteren Zähler (Anzahl der Wanderkennungen) und ein Array für die Schritte der jeweiligen Erkennung?

Pseudocode:
Wenn Wand
-> print(Drehung); i=0; array[zaehler]=var1;zaehler++;var1=0;

Dann weißt du, dass die erste Wand nach X Schriten gefunden wurde, die zweite Wand nach Y schritten etc.
 
spcqike schrieb:
was spricht gegen ein weiteren Zähler (Anzahl der Wanderkennungen) und ein Array für die Schritte der jeweiligen Erkennung?

Pseudocode:
Wenn Wand
-> print(Drehung); i=0; array[zaehler]=var1;zaehler++;var1=0;

Dann weißt du, dass die erste Wand nach X Schriten gefunden wurde, die zweite Wand nach Y schritten etc.
werde ich mal ausprobieren
 
for (i = 0; i <= 10; i++) {

Ich verstehe nicht ganz warum du keine Endlosschleife wählst while(1) und aus der dann ausbrichst wenn die Bedingungen dafür erfüllt sind. Die Iterations-Variable zu verändern ist kein guter Stil.

Außerdem solltest du am Anfang schon auf Benamung der Variablen achten damit der Code verständlich wird.
var1 und var2 sind keine guten Namen. Da du mit var1 scheinbar Schritte zählen möchtest warum dann nicht sowas wie steps_counter?

Ich würde das aber auch mit einem array lösen wie @spcqike schon schrieb.
 
  • Gefällt mir
Reaktionen: spcqike
ok nehm ich als Tip an, bin noch Anfänger wie man schwer erkennen kann und weiß noch nicht, was optimal / nicht optimal ist. Wie würde ich die arrays dann später ansprechen wenn ich z.b. sagen will Array1 - Array3
 
Das Array sprichst du an, wie du dein Wand-Array ansprichst:

array[x]

Nach drei Durchläufen sieht den Array ja bspw so aus

array[] = { 8, 4, 3 }

oder anders geschrieben/gezeigt

array[0]=8
array[1]=4
array[2]=3

damit wurde die erste Wand (Zähler index 0) nach 8 Schritten erreicht, die Zweite nach 4, die Dritte nach 3.
 
Zurück
Oben