DeadsGames hat geschrieben:Hier ist der Code:
Ich formatiere den lieber mal was, damit man ihn lesen kann:
Code: Alles auswählen
# include<stdio.h>
int primfaktor (int x);
int primfaktor (int x)
{
int p=2;
while (x%p!=0)
p++;
if (x == p)
return 0;
while (x%p==0)
{
x=x/p;
while (x%p!=0)
p++;
if (x == p)
return 0;
if(x == p)
break;
}
}
int main ()
{
int pf;
while ((pf= primfaktor(15)) > 1)
printf("%d\n", pf);
while ((pf= primfaktor(11))==1 )
printf ("&d\n", pf);
printf ("%d\n" , primfaktor(1));
return 0;
}
DeadsGames hat geschrieben:Am Ende sollte die Primfaktorzerlegung ausgegeben werden untereinander also bei z.b 15 müsste
3
5
-1 ausgegeben werden
für die 11 einfach 11 ausgegeben werden
Warum?
Die Funktion primfaktor gibt ausschließlich 0 zurück, manchmal auch etwas undefiniertes. Das was Du zurück bekommst - also 0 oder etwas undefiniertes - gibst Du dann aus.
DeadsGames hat geschrieben:Bei mir wird leider nichts ausgegeben
Stimmt. Dein Programm hängt ein einer Endlosschleife.
Ändere den Code in primfaktor oben mal in folgendes
Code: Alles auswählen
while (x%p!=0)
p++, printf( "x: %d % p: %d\n", x, p );
Ist das, was Du erwartest?
Dann ändere den Code mal in
Code: Alles auswählen
while (x%p!=0 && p < 20 )
p++, printf( "x: %d % p: %d\n", x, p );
Entspricht das Deiner Erwartung?
Wenn das Programm nicht tut, was Du erwartest, lass Dir mit printf() Dinge zwischendurch ausgeben und schau, was Deinen Erwartungen entspricht - und was nicht.
Und mach dir doch mal Gedanken darüber, was Du eigentlich mit diesem Code ausdrücken möchtest:
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.