Ich arbeite derzeit durch Accelerated C++ und habe ein Problem in Übung 2-3 gestoßen.Eine Warnung - Vergleich zwischen vorzeichenbehafteten und vorzeichenlosen Integer-Ausdrücken
Ein schneller Überblick über das Programm - das Programm im Grunde nimmt einen Namen, dann zeigt eine Begrüßung in einem Rahmen von Sternchen - d. H. Hallo! umgeben von * s umgeben.
Die Übung - In dem Beispielprogramm verwenden die Autoren const int
, um die Auffüllung (Leerzeichen) zwischen der Begrüßung und den Sternchen zu bestimmen. Sie bitten dann den Leser, als Teil der Übung den Benutzer nach der Eingabe zu fragen, wie groß die Füllung sein soll.
All dies einfach genug scheint, gehe ich frage vor dem Benutzer für zwei ganze Zahlen (int
) und speichert sie und das Programm ändern, um diese Zahlen zu verwenden, die, die vom Autor selbst benutzt zu entfernen, beim Kompilieren obwohl ich die folgende Warnung ;
Exercise2-3.cpp: 46: Warnung: Vergleich zwischen mit und ohne Vorzeichen integer Ausdrücke
Nach einigen Recherchen scheint es zu sein, weil der Code eine der oben genannten Zahlen zu vergleichen versucht (int
) zu einem string::size_type
, was in Ordnung ist. Aber ich frage mich - bedeutet das, ich sollte eine der ganzen Zahlen zu unsigned int
ändern? Ist es wichtig, explizit anzugeben, ob meine Ganzzahlen signiert oder nicht signiert sind?
cout << "Please enter the size of the frame between top and bottom you would like ";
int padtopbottom;
cin >> padtopbottom;
cout << "Please enter size of the frame from each side you would like: ";
unsigned int padsides;
cin >> padsides;
string::size_type c = 0; // definition of c in the program
if (r == padtopbottom + 1 && c == padsides + 1) { // where the error occurs
über den entsprechenden Bits des Codes ist, ist die c
vom Typ string::size_type
, weil wir nicht wissen, wie lange die Begrüßung sein könnte - aber warum, kann ich dieses Problem jetzt erhalten, wenn der Code des Autors nicht bekommen das Problem bei der Verwendung const int
? Zusätzlich - zu jedem, der Accelerated C++ abgeschlossen haben kann - wird das später im Buch erklärt?
Ich bin auf Linux Mint mit g ++ über Geany, wenn das hilft oder einen Unterschied macht (wie ich gelesen habe, könnte es bei der Bestimmung, was string::size_type
ist).
würde nicht annehmen, dass Sie ein in unsigned ints sowieso wollen würde? Ich kann mir keinen logischen Grund vorstellen, warum die Ober- und Unterseite negativ sein sollte – Woot4Moo
Das ist wahr und ich erwähnte das oben im Beitrag, aber ich verstehe immer noch nicht, warum dieses Problem nicht im Beispielprogramm des Autors auftrat sie benutzten const int?Ich bin mir sicher, dass ich dazu im Buch komme, aber ich kann nicht helfen, neugierig zu sein. –
Scrap das - offensichtlich gab es keine Warnung in dieser Situation, weil der Int wurde immer 1 ... oops sein. –