2016-03-19 10 views
2

Also muss ich für meine College-Klasse ein einfaches Programm tun, die eine Struktur fraction mit Zähler und Nenner als ints und eine Funktion is_correct() Überprüfung zwei Bedingungen umfassen würde: ist Nenner !=0 und ist nominator < Nenner. Wenn zwei von ihnen wahr sind, dann sollte ich true zurückgeben, sonst false. Ich bin verpflichtet, den Operator ?: zu verwenden. Also hier ist mein Code:mit Return „:“ Operator

struct fraction {int n,d; 
       bool is_correct(){ 
        d!=0?(return n<d?true:false):return false; 
       }; 
       }; 

Ich meine, ich glaube, ich ein if mit Bedingung verwenden könnte d!=0, aber ich muss nur ?: verwenden, und g++ gibt mir diese: expected primary-expression before 'return'

+1

Der ternäre Ausdruck ist ein Ausdruck und kann keine Anweisungen verarbeiten. 'return' kann nur in Anweisungen verwendet werden, nicht in Ausdrücken. –

+0

Ihre Bearbeitung hat Ihre Frage in das Gebiet von zu weit oder unklar verschoben. Auch wenn es nicht so ist, [Chamäleon-Fragen] (http://meta.stackoverflow.com/a/266768/2792531) sind entmutigt. Wenn Sie eine andere Frage stellen möchten, markieren Sie hier eine akzeptierte Antwort und geben Sie eine neue Frage ein. Daher habe ich deine Bearbeitung zurückgesetzt. – nhgrif

+0

Da Sie den ternären Operator ('?:', Nicht '?') Verwenden müssen, enden Sie mit ziemlich dummen Dingen wie 'return n

Antwort

5

Wenn zwei von ihnen wahr sind, dann soll ich true zurück, andernfalls false

Dies ist eine ziemlich Standard Wahrheitstabelle, nicht wahr?

| T | F 
---+---+--- 
T | T | F 
---+---+--- 
F | F | F 

Und ich weiß, einen Operator, der eine identische Wahrheitstabelle hat: &&.

Wir brauchen hier kein Ternär. Wir können einfach schreiben:

return d != 0 && n < d; 

Eine noch prägnanter Lösung sieht wie folgt aus:

return d && n<d; 

Aber ich werde den Fall, dass die erste Lösung deutlicher die Absicht des Coder zum Ausdruck bringt, das ist ein wichtiger Berücksichtigung.

+1

Noch einfacher ist: 'return d && n

+0

Wenn Sie am meisten daran interessiert sind, das Syntaxproblem in Ihrem Code in Bezug auf ternäre Anweisungen zu beheben, sollten Sie eine der anderen Antworten als akzeptiert markieren. Wenn Sie daran interessiert sind, sauberen und prägnanten Code zu erstellen, sollten Sie diese einfache, lesbare Lösung in Betracht ziehen. – nhgrif

+0

@ l3x Vielleicht, aber ich denke, dass 'd! = 0' die Absicht etwas besser ausdrückt (besonders, wenn Sie Leute aus anderen Sprachen betrachten wollen, die es nicht zulassen, dass ganze Zahlen als Bools wie diese behandelt werden). Aber ein stichhaltiger Punkt. – nhgrif

3

einfach die return außen bewegen der Bedingung (hinzugefügt Abstand für Klarheit):

return d != 0 ? (n < d ? true : false) : false; 
+3

'zurück d! = 0? (n nhgrif

+3

Du könntest sogar' d! = 0 && n

+0

Tatsächlich wollte ich tatsächlich eine Antwort mit diesem Code schreiben. – nhgrif

1
struct fraction { 
    int n,d; 

    bool is_correct() { 
    return d != 0 ? (n < d ? true : false) : false; 
    }; 
};