Ich habe ein Problem mit dem Programm, das ich programmieren möchte. Es ist nur ein Windows-Konsolenprogramm und ich bin sehr neu in C ++. Es ist nur mein 4. Programm.
Das Problem, das ich habe ist, dass, wenn ich mein Programm laufen habe ich keine Fehler, aber viele Warnungen, die sagen "Vergleich mit String-Literal Ergebnisse in unspezifiziertem Verhalten" in den Zeilen, die ich unten hervorheben werde.
Wenn das Programm läuft, anstatt die Zahlen hinzuzufügen, die ich will, gibt es mir einfach eine zufällige große Zahl, egal was ich für meine Eingaben verwende.
Hier ist der Code:
%Vor%Jede Hilfe wird geschätzt. Es ist wahrscheinlich etwas Großes, das ich falsch gemacht habe. Die Namen in den if-Anweisungen sind alle zur Zeit Platzhalter und ich werde viel mehr if-Anweisungen hinzufügen, wenn ich es mit der bare 6 arbeiten kann, was es braucht, um zu arbeiten.
In C ++ ==
nur intern implementiert für primitive Typen und Array ist kein primitiver Typ, daher vergleicht char[100]
und String-Literal nur 2 char*
oder besser als 2 Zeiger und seit dem 2 Zeiger können nicht gleich sein, dann kann items[n] == "ae"
niemals wahr sein, stattdessen sollten Sie entweder std::string
verwenden, um die Zeichenfolge wie folgt zu halten:
oder Sie sollten strcmp
verwenden, um Strings zu vergleichen, aber erinnern Sie sich an strcmp
return 0 für gleiche Strings, also lautet Ihr Code wie folgt:
Und eine zusätzliche Anmerkung ist if (items == 0)
ist nutzlos, da items
auf Stack und nicht im Heap allokiert ist!
Erstens ist int * price;
ein fliegender Zeiger - Sie initialisieren ihn nie. Sie müssen tun:
Zweitens bezeichnet i
normalerweise einen Iterator-Index, also schlage ich vor, dass Sie dabei bleiben - also
Drittens müssen Sie char-Arrays mit strncmp
in Ihrem Fall vergleichen.
Vierte und wichtigste - verwenden Sie stattdessen std::string
und std::vector
. Das ist C ++, nicht C.
Sie vergleichen Zeiger, nicht die tatsächlichen Zeichenfolgen. Verwenden Sie C ++ string
class anstelle von char*
(oder überprüfen Sie Funktionsweise von C-Strings ).
Nur eine kleine Sache, die mich ein wenig stolpern ließ, ist der Unterschied zwischen einfachen und doppelten Anführungszeichen, siehe: Einfache Anführungszeichen und doppelte Anführungszeichen in C oder C ++
Ich habe das erste Zeichen einer Zeichenkette mit doppelten Anführungszeichen und nicht einfachen Anführungszeichen verglichen - was zu der obigen Fehlermeldung führte.
Tags und Links c++