C Programm - for Schleife funktioniert nicht

Gast #6863621
Lesenswert?

Hallo, ich will gerne die Widerstandsdekaden der E12-Reihe in C 
ausgeben. Diese sollen tabellarisch ausgegeben werden und mit einer 
Feldweite von 8 sowie einer Nachkommastelle.

Mein Code sieht folgendermaßen aus:
1
#include <stdio.h>
2
#include <math.h>
3
#include <stdlib.h>
4

5
int main(){
6

7
int x = 1;
8
int iNummer = 0;
9
float fWert;
10

11
for(x=1; x<=12; x++)
12
{
13

14
fWert = pow(10, x/12);
15

16
iNummer++;
17
printf("\n\tNr: %d\t Widerstand:\t %8.1f", iNummer, fWert);
18

19
}
20
}

Der Code wird auch ausgeführt, nur zeigt er bei jedem Widerstand den 
Wert 1.0 an. Wie komme ich darauf, dass er 1.2, 1.5,.... etc... ausgibt?


Wo liegt der Fehler? Was habe ich falsch gemacht?
#6863630
Lesenswert?

Juergen72 schrieb:
> Wo liegt der Fehler? Was habe ich falsch gemacht?

x ist integer. und x ist deine Lauf-Variable.
1/12 = 0   --> 10 hoch 0  = 1
2/12 = 0   --> 10 hoch 0 = 1
..
12/12 = 1  --> 10 hoch 1 gleich 10

Du hast deine Ausgabe zwar als float Zahl, aber die vorherige Berechnung 
macht halt das was du gesagt hast.

somit wird dann aus 1 ein 1.0, und aus 10 ein 10.0 (weil du es so 
ausgaben möchtest mit %8.1f)


Tip: Wenn du durch 12.0 teilst anstelle durch 12, wird das ganze 
"automatisch" zu float berechnet

edit: germel war schneller
#6863768
Lesenswert?

Da an der Berechnung nur Integerwerte beteiligt sind, wird die Division 
auch nur als Integerdivision ausgeführt.

Dies gilt auch für Teilausdrücke wie 1.0 + x/12
Wegen Punkt vor Strichrechnung wird zuerst x/12 ausgewertet.
Dabei ist es auch egal, was für einer Variablen das später zugewiesen 
wird.

Wozu iNummer?
Was ist der Unterschied zu x?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren