meine while Schleife funktioniert nicht ;)

#5678507
Lesenswert?

1
  name = xml_value (buf, "name");
2
  attr = xml_value (buf, "value");
3
  ball = calloc (1, sizeof(pin_struct));
4
  ball->next = chip->balls;
5
  chip->balls = ball;
6
  ball->name = name;
7
  for (si = 0; si < SIGMAX; si++) {
8
     st = strchr (attr, ' ');
9
     if (st) { 
10
        *st++ = '\0';
11
     }
12
     ball->eagle_signal[si] = attr;
13
     ball->cube_signal[si] = attr;
14
     ball->signal[si] = attr;
15
     attr = st;
16
  } while (attr);
Der gcc merkt nichts. Ich finde es bemerkenswert. Nachdem es syntaktisch 
o.k. ist, wäre es doch nett, wenn es auch funktionieren würde.

Das war mal eine do {} while() Schleife, dann hab' ich das SIGMAX dazu 
gebaut.
Jetzt schreibe ich
1
for (si = 0; attr && si < SIGMAX; si++, attr = st) {
Ist das unmoralisch oder unverständlich oder gar doof?
Persönliche Seite #5678521
Lesenswert?

Das sind halt zwei komplett unabhängige Schleifen hintereinander. Besser 
erkennt man es wenn man einen (wirklungslosen) Zeilenumbruch einfügt:
1
  for (si = 0; si < SIGMAX; si++) {
2
    // ...
3
  }
4
  while (attr);
Die while-Schleife läuft also endlos wenn attr nicht 0 ist, und macht 
sonst gar nichts. Natürlich merkt der GCC hier nicht ob das so gewollt 
ist...

Bauform B. schrieb:
> Jetzt schreibe ich

Warum machst du das "attr=str" nicht einfach ans Ende der Schleife, vor 
das "}"?
#5678538
Lesenswert?

Oliver S. schrieb:
> Bauform B. schrieb:
>> Der gcc merkt nichts. Ich finde es bemerkenswert.
>
> Ich nicht. Das ist syntaktisch einwandfreies C. Und es wird auch
> funktionieren.

Das ist ja das ärgerliche, die Maschine macht immer genau was ich 
sage...

Niklas G. schrieb:
> Das sind halt zwei komplett unabhängige Schleifen hintereinander.
> Besser erkennt man es wenn man einen (wirklungslosen)
> Zeilenumbruch einfügt:
1:0 für Python

> Warum machst du das "attr=str" nicht einfach ans Ende der Schleife, vor
> das "}"?

na gut, überredet, danke.
#5678845
Lesenswert?

Bauform B. schrieb:
> Oliver S. schrieb:
>> Bauform B. schrieb:
>>> Der gcc merkt nichts. Ich finde es bemerkenswert.
>>
>> Ich nicht. Das ist syntaktisch einwandfreies C. Und es wird auch
>> funktionieren.
>
> Das ist ja das ärgerliche, die Maschine macht immer genau was ich
> sage...

Eine der wichtigsten Erkenntnisse der Programmierung: Der Computer macht 
nie das, was du willst, sondern das, was du programmierst.
Beitrag #6818309 wurde von einem Moderator gelöscht.
Beitrag #6818352 wurde von einem Moderator gelöscht.
Beitrag #6818361 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.