2016-04-29 3 views
-3

Also für meine comp sci-Klasse wurde ich beauftragt, römische Zahlen zu addieren, subtrahieren, teilen und multiplizieren, wenn sie 12 Regeln, die ich gegeben habe, bestehen.Überprüfen von Fehlern der römischen Ziffern gegeben einen Satz von Regeln

Ich erstellte ein Boolean-Array mit 13 Elementen, um zu verfolgen, welche Regeln verletzt wurden. Ich habe eine Funktion namens checkErrors erstellt, die jede der 12 Regelprüffunktionen aufruft. Ich rufe die checkErrors an, um jede römische Ziffer zu überprüfen, bevor die Berechnung durchgeführt wird, und auszudrucken, welcher der Fehler falsch ist (falls vorhanden), aber statt nur die falschen auszudrucken, druckt jeder einzelne.

Unten ist ein Ausschnitt von checkErrors, der für jede Regel (checkErrorOne, checkErrorTwo ... usw.) gleich ist. Wenn die Regel fehlerhaft ist, wird errors[0] auf false gesetzt, um anzuzeigen, dass die gesamte römische Zahl nicht zulässig ist.

`bool checkErrors(string romanNumeral, bool * errors) { 
if (checkErrorOne(romanNumeral) == false) { 
    errors[1] = false; 
    errors[0] = false; 
} 
if (checkErrorTwo(romanNumeral) == false) { 
    errors[2] = false; 
    errors[0] = false; 
} 
if (checkErrorThree(romanNumeral) == false) { 
    errors[3] = false; 
    errors[0] = false; 
} 
if (checkErrorFour(romanNumeral) == false) { 
    errors[4] = false; 
    errors[0] = false; 
} 
if (checkErrorFive(romanNumeral) == false) { 
    errors[5] = false; 
    errors[0] = false; 
} 
if (checkErrorSix(romanNumeral) == false) { 
    errors[6] = false; 
    errors[0] = false; 
} 
if (checkErrorSeven(romanNumeral) == false) { 
    errors[7] = false; 
    errors[0] = false; 
} 
if (checkErrorEight(romanNumeral) == false) { 
    errors[8] = false; 
    errors[0] = false; 
} 
if (checkErrorNine(romanNumeral) == false) { 
    errors[9] = false; 
    errors[0] = false; 
} 
if (checkErrorTen(romanNumeral) == false) { 
    errors[10] = false; 
    errors[0] = false; 
} 
if (checkErrorEleven(romanNumeral) == false) { 
    errors[11] = false; 
    errors[0] = false; 
} 
if (checkErrorTwelve(romanNumeral) == false) { 
    errors[12] = false; 
    errors[0] = false; 
} 

if (errors[0] == true) 
    return true; 
else if (errors[0] == false) 
    return false; 

} `

den Wert des ersten Elements zurück zu sagen, wenn es legal ist.

Danach, wenn ich gehe jede Regel zu drucken, die ich benutze das folgende gebrochen wurde:

void printFunction(string romanNumeral1, string romanNumeral2, string mathOperator, bool errors[]){ 
if (checkErrors(romanNumeral1, errors) == false && checkErrors(romanNumeral2, errors) == true){ 

    cout << romanNumeral1 << " is illegal becasue" << endl; 
    if (errors[1] == false) 
     cout << "Contains a letter that is not M, D, C, L, X, V, or I;" << endl; 
    if (errors[2] == false) 
     cout << "I is not followed by I, V, or X;" << endl; 
    if (errors[3] == false) 
     cout << "X is not followed by I, V, X, L, or C;" << endl; 

für jede der 12 Regeln. Es wird jeder der Fehler gedruckt, nicht jeder Fehler.

Wenn jemand mit meiner Logik helfen könnte, würde es sehr geschätzt werden.

void printFunction(string romanNumeral1, string romanNumeral2, string mathOperator, bool errors[]){ 
if (checkErrors(romanNumeral1, errors) == false && checkErrors(romanNumeral2, errors) == true){ 

    cout << romanNumeral1 << " is illegal becasue" << endl; 
    if (errors[1] == false) 
     cout << "Contains a letter that is not M, D, C, L, X, V, or I;" << endl; 
    if (errors[2] == false) 
     cout << "I is not followed by I, V, or X;" << endl; 
    if (errors[3] == false) 
     cout << "X is not followed by I, V, X, L, or C;" << endl; 

Edit: Warum wird der Code, den ich schrieb 12 Fehler jeder der Ausdruck ich stattdessen die, die das Drucken von nur erstellt, die verletzt wurden?

Dank

+0

Hilfe mit was? Was ist das Problem? – jpo38

+0

Wenn Sie mithilfe eines Debuggers helfen könnten, würde es sehr geschätzt werden. Führen Sie Ihre Programmanweisung nach Anweisung aus, * beobachten Sie * die Werte der Variablen. Lassen Sie uns wissen, welche Aussage das Problem verursacht. –

+0

Was ist der Wert des Array 'errors', wenn alles gedruckt wird? –

Antwort

3

Off-Topic: Ihr Programm kann durch eine Reihe von Fehlermeldungen vereinfacht werden.

Die if Anweisung Leiter würde durch eine Schleife ersetzt werden:

for (unsigned int i = 0U; i < MAXIMUM_ERROR_TYPES; ++i) 
{ 
    if (errors[i]) 
    { 
    std::cout << error_messages[i]; 
    } 
} 

dort Da weniger Code ist, wird es weniger Möglichkeit der injizierten Defekte.

+0

genial. Das werde ich heute Abend umsetzen, wenn ich an meinen Computer zurückkomme. –

+0

Wenn das hilfreich war, klicken Sie bitte auf das Häkchen. –

0

Ok, vor allem, haben Sie nicht posten Sie Ihre checkErrors Code, also hier gehe ich davon aus. Ich denke, dass Sie definiert ist als

bool checkErrors(string, bool errors[13]){ 

was bedeutet, dass es nicht einen Zeiger nicht nehmen, aber eine Kopie der 13 booleans. Sie werden also innerhalb Ihrer Funktion modifiziert, aber nicht außerhalb. Ändern Sie ihn auf:

bool checkErrors(string, bool* errors){ 

ps. Denken Sie beim nächsten Mal daran, wie Menschen, die kein Wissen über Ihr Problem haben, es verstehen werden. Spart Ihnen eine Menge Flak;)

+0

Hinzugefügt den ganzen Code für Prüffehler mit der Änderung, die Sie vorgeschlagen –

Verwandte Themen