Zählvariable in for-schleife springt direkt auf Abbruchbedingung

OP #4409061
Lesenswert?
• ▲
▼
MoinMoin und n frohes Neues =)

Ich hab ein kleines Problem, ich befasse mich zur Zeit mit der 
Darstellung vom 3dimensionalen auf dem 2dimensionalen Bildschirm. Dazu 
hatte ich auch schon ein paar andere Fragen, bei denen mir geholfen 
wurde.

Nun aber ein rein "programiererisches" Problem. Um meine Körper zu 
verschieben, habe ich eine Funktion geschrieben, die die einzelnen 
Punkte des Körpers im Raum verschiebt. Nun habe ich eine übergeordnete 
Funktion geschrieben um den Körper als ganzes zu verschieben. Dazu rufe 
ich in einer for-Schleife einfach so oft die Punktverschiebung auf, wie 
der Körper Punkte hat. Aber die Zählvariable springt direkt auf die 
Abbruchbedingung.
1
void Koerper_Translation(sVektor* pSchiebevektor, sKoerper* pKoerper)
2
{
3
    uint32_t i = 0;
4

5
    for(i = 0; i < pKoerper->Punktzahl; i++);
6
    {
7
        Translation(pSchiebevektor, &pKoerper->Punkt[i]);
8
    }
9
}

mehr ist das nicht. Wenn ich einfach in der main
1
for(i = 0; i < pKoerper->Punktzahl; i++);
2
    {
3
        Translation(pSchiebevektor, &pKoerper.Punkt[i]);
4
    }

ausführe, klappt es. Über die Koerper_Translation siehts so aus:

Er springt in die Funktion, i wird erzeugt und auf 0 gesetzt. Dann 
springt er in die Schleife und i ist direkt 8. (Mein Kubus besteht aus 8 
Punkten).
Optimierungen sind aus, ich arbeite mit CodeBlocks(GCC)

MfG Chaos
OP #4409100
Lesenswert?
• ▲
▼
Sebastian S. schrieb:
> Mit dem Semikolon am Ende sollte es auch da nicht gehen.

Copy und Paste. Hatte die Schleife einfach aus dem Text nochmal kopiert 
und aus dem -> ein . gemacht. In der main stand es ohne, daher klappte 
es da auch.

Oliver S. schrieb:
> Ich vermute dazu noch ein überzähliges &

Ne das braucht er. Wird hieran liegen:
1
typedef struct sVektor__
2
{
3
    long double X;
4
    long double Y;
5
    long double Z;
6
}sVektor;
7

8
typedef struct sKante__
9
{
10
    uint32_t Start;
11
    uint32_t Ende;
12
    int Farbe;
13
}sKante;
14

15
typedef struct sKoerper__
16
{
17
    uint32_t Punktzahl;
18
    sVektor* Punkt;
19
    uint32_t Kantenzahl;
20
    sKante*  Kante;
21
}sKoerper;
Gast #4409149
Lesenswert?
• ▲
▼
Rolf M. schrieb:
> kann es sinnvolle Schleifen ohne
> Schleifenkörper durchaus geben.

clang erkennt das trotzdem und warnt, wenn das Semikolon in der gleichen 
Zeile steht. Echte C-Programmierer (die, die nie Fehler machen und immer 
alles im Block haben) werden sich dadurch natürlich in ihrer Freiheit 
eingeschränkt fühlen ;)
1
#include <stdio.h>
2

3
int main(void)
4
{
5
    size_t i;
6
    for (i = 0; i < 20; ++i);
7
    {
8
        printf("%zu\n", i);
9
    }
10

11

12
    for (i = 0; i < 20; ++i);
13

14
    {
15
        printf("%zu\n", i);
16
    }
17

18
    for (i = 0; i < 20; ++i)
19
        ;
20
    {
21
        printf("%zu\n", i);
22
    }
23

24
    if (i == 0);
25
    {
26
        printf("%zu\n", i);
27
    }
28

29

30
    return 0;
31
}

1
$ gcc -Wall -Wextra -pedantic  1.c 
2
1.c: In function ‘main’:
3
1.c:24:16: warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body]
4
     if (i == 0);

1
$ clang  -Weverything 1.c 
2
1.c:24:16: warning: if statement has empty body [-Wempty-body]
3
    if (i == 0);
4
               ^
5
1.c:24:16: note: put the semicolon on a separate line to silence this warning
6
1.c:6:29: warning: for loop has empty body [-Wempty-body]
7
    for (i = 0; i < 20; ++i);
8
                            ^
9
1.c:6:29: note: put the semicolon on a separate line to silence this warning
10
1.c:12:29: warning: for loop has empty body [-Wempty-body]
11
    for (i = 0; i < 20; ++i);
12
                            ^
13
1.c:12:29: note: put the semicolon on a separate line to silence this warning
14
3 warnings generated.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.