2016-12-17 4 views
-4

Ich versuche ein einfaches "Fizzbuzz" -Programm zu erstellen, bei dem jedes Mal, wenn ein Vielfaches von 3 gedruckt wird, 'fizz' daneben gedruckt wird und jedes Mal, wenn ein Vielfaches von 5 gedruckt wird, 'buzz' daneben gedruckt wird. Was jedoch stattdessen in diesem Programm passiert ist, dass die erste if-Anweisung jedes Mal wahr ist und die Ausgabe ist jede Zahl mit "Buzz!" daneben. Warum passiert dies? Was muss ich beachten, um dies richtig zu programmieren?Wie kann ich das beheben, wenn Aussage?

for(int index = 1; index <= 100; ++index) { 
    cout << index << endl; 
    if (index == 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100) 
     cout << " Buzz!" << endl; 
    else if(index == 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99) 
     cout << " Fizz!" << endl; 
} 
+0

1. Diese 'wenn' tun nicht, was sie denken, dass sie tun. 2. Der Weg, um zu prüfen, ob eine Zahl durch 5 teilbar ist, besteht darin, den Rest der Division durch fünf mit Null zu vergleichen, d.h. 'Anzahl% 5 == 0' – dasblinkenlight

Antwort

1

der Komma-Operator in C++ bedeutet etwas ganz anderes - es trennt zwei Ausdrücke, vergißt, das Ergebnis der ersten und gibt den Wert des zweiten.

if (100) { 
    ... 

die immer wahr ist (jeder Nicht-Null-Expression in C/C++ als wahr ausgewertet wird):

Deshalb ist die erste Anweisung kann technisch verkürzt werden.

Um so viele Vergleiche zu vermeiden, können Sie den Operator % verwenden.

if (i%5 == 0) { 
    cout << " Buzz!" << endl; 
} 
else if (i%3 == 0) { 
    cout << " Fizz!" << endl; 
} 
+0

Vielen Dank an alle. Ich werde von nun an den Modul in Betracht ziehen und diesen Code mit den Informationen, die Sie mir gegeben haben, korrigieren. – CosmicBatz

0

Dies kann leicht mit dem Modul (%) gereinigt werden.

for(int index = 1; index <= 100; ++index) { 
    cout << index << endl; 
    if (index % 5 == 0) 
     cout << " Buzz!" << endl; 
    else if(index % 3 == 0) 
     cout << " Fizz!" << endl; 
} 
Verwandte Themen