Frage

Wie geht C zwischen ganzen Zahlen und Zeichen konvertieren? Sagen Sie bitte eine Integer-Variable deklariert haben und bitten Sie den Benutzer für eine Zahl, aber sie geben Sie einen String statt. Was würde passieren?

War es hilfreich?

Lösung

Die Benutzereingabe wird als String behandelt, die unter Verwendung von atoi oder einem anderen Umwandlungsfunktion in einem int umgewandelt werden muss. Atoi 0 zurück, wenn die Zeichenfolge nicht als Nummer interptreted werden, weil sie Briefe oder andere nicht-numerische Zeichen enthalten.

Sie können ein bisschen mehr an der atoi Dokumentation auf MSDN lesen - http://msdn.microsoft.com/en-us/library/yd5xkb5c (VS.80) aspx

Andere Tipps

Uh? Sie immer Eingabe einer Zeichenfolge. Dann analysieren Sie diese Zeichenfolge Zahl umwandeln, mit verschiedenen Möglichkeiten (fragt wieder, einen Standardwert nehmen, etc.) verschiedene Fehlerbehandlung (Überlauf, falsche Zeichen, usw.).

Eine andere Sache zu beachten ist, dass in C, Zeichen und Zahlen „kompatibel“ bis zu einem gewissen Grad sind. Jeder Charakter kann in einem int zugeordnet werden. Die umgekehrte auch funktioniert, aber Sie werden Informationen verlieren, wenn der Integer-Wert in einen char paßt nicht.

char foo = 'a'; // The ascii value representation for lower-case 'a' is 97
int bar = foo; // bar now contains the value 97 
bar = 255; // 255 is 0x000000ff in hexadecimal
foo = bar; // foo now contains -1 (0xff) 
unsigned char foo2 = foo; // foo now contains 255 (0xff)

Wie andere Leute bemerkt haben, werden die Daten normalerweise als Zeichenfolge eingegeben - die Frage ist nur, welche Funktion für das Erledigen der Lesung verwendet wird. Wenn Sie eine GUI verwenden, kann die Funktion bereits mit Konvertierung umgehen integer und die Meldung von Fehlern und so in geeigneter Weise. Wenn Sie mit dem Standard-C arbeiten, ist es in der Regel einfacher, den Wert in einen String zu lesen (vielleicht mit fgets() und dann konvertieren Obwohl atoi() verwendet werden kann, ist es selten die beste Wahl ist,. Das Problem ist, zu bestimmen, ob die Umwandlung erfolgreich war ( und erzeugen Null, da der Benutzer eine legitime Vertretung von Null) eingegeben oder nicht.

Im Allgemeinen verwenden strtol() oder einem seiner Verwandten (strtoul(), strtoll(), strtoull()); Gleitkommazahlen zum Umwandeln verwendet strtod() oder eine ähnliche Funktion. Der Vorteil der Integer-Konvertierungsroutinen sind:

  • optional Basisauswahl (beispielsweise die Basis 10 oder die Basis 10 - hex, oder Base. 8 - oktale oder einer der oben unter Verwendung von Standard-C-Konventionen (007 für oktal, 0x07 für hex, 7 für dezimal)
  • optional Fehlererkennung (durch zu wissen, wo die Umwandlung gestoppt).

Der Ort, wo ich für viele diese Funktion Spezifikationen gehen (wenn ich meine Kopie des aktuellen C-Standard nicht aussehen) ist die POSIX Website (die C99-Funktionen enthält). Es ist Unix-centric eher als Windows-centric.

Das Programm würde abstürzen, müssen Sie atoi Funktion aufzurufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top