Problem mit dem ASCII Zeichen Grad °



  • also ich möchte mit gets() einen String einlesen von Winkel zb 12° und den in eine Double Zahl mit einer Schleife umwandeln aber nur bis zum ° Zeichen einlesen --> geht das überhaupt gescheit da ich in meiner ASCII Tabelle die ich im Visual ausgegeben habe das Grad Zeichen nicht gefunden habe?? und nicht weiß wie ich das anstellen muss? wie kann ich eigentlich auch Komma Zahlen und Minus Zahlen die ich mit einem String eingegeben habe leicht in eine double Zahl umwandeln? (ich muss das mit gets() machen)?

    big thx



  • atof () // array to float
    sollte dir helfen.

    Nunja du musst da ggf. UNICODE verwenden, dazu schaust du in einer C-Referenz mal
    nach wide characters oder wide chars
    Unter Windows, verwende einfach "TCHAR variable;" und füge in dein Programm #define UNICODE
    ein, dann verwendet der Compiler UNICODE.
    Den Text am besten mit dem Makro TEXT ("String"); schreiben, wenn du nun das
    #define UNICODE weglässt hast du normale ASCII-Zeichen.



  • thx aber funktionen darf ich nicht verwenden muss das alles mit schleifen und so lösen hab aber grad rausgefunden dass das ° Zeichen -8 ist ?? komisch?



  • Hab grad keine ASCII-Tabelle da aber ACII ist 0-127 und der erweiterte 0-255
    da gibts keine Negativen Codes.



  • Downset schrieb:

    [...]hab aber grad rausgefunden dass das ° Zeichen -8 ist ?? komisch?

    Keine Panik. 🙂
    Das bedeutet nur, dass char auf deiner Plattform vorzeichenbehaftet (signed) ist.

    Die ASCII-Tabelle hat nur 128 Zeichen, nicht mehr und nicht weniger. Alles was darüber hinaus geht gehört zum erweiterten ASCII-Code. Der ANSI-Code von Windows ist ein, naja, ähnlicher Code. Die ersten 127 Zeichen sind zum Großteil identisch, danach hörts auf. Deswegen werden z.B. Umlaute in der Konsole falsch dargestellt.

    Im Quelltext (sofern du unter Window programmierst) darf also nicht '°' oder "°" stehen. Das wird nicht funktionieren, weil das Windows-° ein anderes ° ist als das DOS-°. 🤡
    Du hast die Lösung eigentlich schon: Wenn -8 der Zeichencode ist, dann sagt man das einfach noch dem Compiler:

    // Das Leerzeichen wird gleich gegen ° ausgetauscht:
    char Buffer[10] = "12 ";
    // Den Zeichencode -8 in char umwandeln, ergibt °:
    Buffer[2] = (char)(-8);
    

    p.s.: Ich bin mir nicht sicher, es kann sein das der cast in C überflüssig ist.

    pps: Der "richtige" erweiterten ASCII-Code des °-Zeichens ist 248. -8 ist in der Binärdarstellung gleich, deswegen klappt es auch damit.


Log in to reply