Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 19

Thema: c programm

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.10.2006
    Beiträge
    76

    Unhappy c programm

    Aufgabe:

    Erstellen Sie ein C-Programm, das auf dem Bildschirm um die Eingabe eines Buchstabens
    bzw. Zeichens bittet. Speichern Sie dieses Zeichen in einer Variablen vom Typ char.
    Dann wird in einer Tabelle
    • das eingegebene Zeichen
    • seine (Dezimal-) Nummer im ASCII-Code (für die Eingabe mit dem Numblock)
    • die gebräuchlichere Hexadizimalnummer
    • und der Oktalwert
    angezeigt (siehe Bild). Probieren Sie dieses Programm mit „normalen“ Buchstaben und
    Ziffern aus. Verifizieren Sie die Ausgabe, indem Sie statt eines Buchstaben dessen Tastenkombination
    auf dem Num-Block drücken (So sollte z.B. bei <Alt>+65, also drücken
    und Halten der <ALT>-Taste, Eingabe der 65 auf dem Num-Block, Loslassend der Alt-
    Taste, ein großes A angezeigt werden)

    Frage:

    wie kann ich mit C einen ascii code in dez./hex./okt.-werte umrechnen? gibt es dazu einfache befehle? oder muss man die rechnung irgendwie in ihren einzelschritten eingeben?

    oder einfach alle zeichen der ascii-tabelle (http://de.wikipedia.org/wiki/ASCII-Tabelle) mit dem eigegebenen wert vergleichen?

  2. #2
    Registrierter Benutzer Avatar von lokicall
    Registriert seit
    17.12.2005
    Beiträge
    53
    Musst du die Umrechnung selber implementieren oder kannst du die Ausgabe von printf nutzen?

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.10.2006
    Beiträge
    76

    c programm

    ich kann printf benutzen, es soll halt so ne tabelle rauskommen...

    siehe auch:
    http://www.itm.tum.de/lehre/informat...nblatt_SE2.pdf

  4. #4
    Registrierter Benutzer
    Registriert seit
    10.03.2004
    Beiträge
    96
    Is doch einfach
    Code:
    #include <stdio.h>
    
    int main(){
    	char zeichen;
    	
    	while(1){
    		printf("\n\nBitte geben sie ein beliebiges Zeichen ein: ");
    		scanf("%c",&zeichen);
    		printf("\n-----------------------------------------------------");
    		printf("\n|   ASCII    |    Dez.    |    Hex.    |    Okt.    |");
    		printf("\n-----------------------------------------------------");
    		printf("\n|     %c      |     %2d     |     %2X     |    %o     |",zeichen,zeichen,zeichen,zeichen);
     		printf("\n-----------------------------------------------------");
     		fflush(stdin);
    	}
    }

  5. #5
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Zur Erklärung: ein char ist in C ein integraler Typ, d.h. eine Ganzzahl, man kann damit rechnen wie mit short,int und long! Wenn man Buchstaben als char's speichert, wird der dem Buchstaben entsprechende ASCII-Wert in die char-Variable geschrieben. diesen ASCII-Wert kann man dann z.B. mit printf("%2d", var); als Dezimalwert oder mit printf("%2X", var); als Hex-Wert ausgeben.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  6. #6
    Registrierter Benutzer
    Registriert seit
    22.10.2006
    Beiträge
    76

    Talking cool^^

    also erst mal vielen dank!

    leider werden umlaute (ü ö ä...) nicht wirklich richtig angezeigt, wie kann man das noch verbessern?

  7. #7
    Registrierter Benutzer
    Registriert seit
    10.03.2004
    Beiträge
    96
    Das Problem liegt in der Zeichencodierung der Konsole.Die Konsole verwendet einen anderen Zeichensatz als der C-Compiler. Das könntest du in den griff bekommen wenn du die Codepage der Konsole änderst.

  8. #8
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Umlaute haben keine ASCII-Kodierung (vgl. mit der ASCII-Tabelle im Link des Thread-Erstellers), daher werden sie auch nicht korrekt dargestellt.

    Mini-Test:
    Code:
    #include <stdio.h>
    
    int main() {
    	printf("%c | %3d | %2X | %3o \n", 'ä', 'ä', 'ä', 'ä' );
    	return 0;
    }
    gibt beim Kompilieren mit
    Code:
    gcc -Wall prog.c
    folgende Meldungen
    Code:
    prog.c:4:36: Warnung: Zeichenkonstante mit mehreren Zeichen
    prog.c:4:42: Warnung: Zeichenkonstante mit mehreren Zeichen
    prog.c:4:48: Warnung: Zeichenkonstante mit mehreren Zeichen
    prog.c:4:54: Warnung: Zeichenkonstante mit mehreren Zeichen
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  9. #9
    Registrierter Benutzer
    Registriert seit
    10.03.2004
    Beiträge
    96
    ASCII sind 127 Zeichen, die anderen 127 können entweder DOS oder PC Zeichensatz sein. Diese unterscheiden sich natürlich.
    Die Meldung
    Code:
    prog.c:4:36: Warnung: Zeichenkonstante mit mehreren Zeichen
    bekommst du weil du dein Quellcode mit UTF8 Codierung genommen hast, dann bekommen die Umlaute natürlich 16Bit. Wenn ich DOS Zeichensatz nehme habe ich keinerlei Warnungen. Um die Umlaute allerdings verabeiten zu können muss ich meine Codepage ändern.
    Daher ergibt die Ausgabe von:
    Code:
    #include <stdio.h>
    
    int main() {
    	int i,j;
    for(i = 0; i <= 0xF; i++){
    	for(j = 0; j <= 0xF; j++)
    		printf("%c ", (i<<4) | j);
    	printf("\n");
    }
    }
    Auch sowas
    Code:
      ☺ ☻ ♥ ♦ ♣ ♠
     ♫ ☼
    ► ◄ ↕ ‼ ¶ § ▬ ↨ ↑ ↓ → ← ∟ ↔ ▲ ▼
      ! " # $ % & ' ( ) * + , - . /
    0 1 2 3 4 5 6 7 8 9 : ; < = > ?
    @ A B C D E F G H I J K L M N O
    P Q R S T U V W X Y Z [ \ ] ^ _
    ` a b c d e f g h i j k l m n o
    p q r s t u v w x y z { | } ~ ⌂
    Ç ü é â ä à å ç ê ë è ï î ì Ä Å
    É æ Æ ô ö ò û ù ÿ Ö Ü ø £ Ø × ƒ
    á í ó ú ñ Ñ ª º ¿ ® ¬ ½ ¼ ¡ « »
    ░ ▒ ▓ │ ┤ Á Â À © ╣ ║ ╗ ╝ ¢ ¥ ┐
    └ ┴ ┬ ├ ─ ┼ ã Ã ╚ ╔ ╩ ╦ ╠ ═ ╬ ¤
    ð Ð Ê Ë È ı Í Î Ï ┘ ┌ █ ▄ ¦ Ì ▀
    Ó ß Ô Ò õ Õ µ þ Þ Ú Û Ù ý Ý ¯ ´
    * ± ‗ ¾ ¶ § ÷ ¸ ° ¨ · ¹ ³ ² ■
    Und was sehe ich da, ahh die Umlaute nach DOS-Erweiterung.
    Geändert von MasterFX (19-11-2007 um 15:26 Uhr)

  10. #10
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    hmm, stimmt, hab natürlich nicht daran gedacht meine Datei als nicht UTF-8 abzuspeichern...

    Edit: @darxun: Aber wenns nur um ASCII-Zeichen geht, kannst du das mit den Umlauten getrost weglassen, die gehören nicht zu ASCII.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  11. #11
    Registrierter Benutzer Avatar von lokicall
    Registriert seit
    17.12.2005
    Beiträge
    53

    Talking

    ASCII sind 127 Zeichen, die anderen 127
    Kleine Korrektur:

    ASCII sind die 128 Zeichen und die anderen 128 sind abhängig vom Zeichensatz.

  12. #12
    Registrierter Benutzer
    Registriert seit
    22.10.2006
    Beiträge
    76

    änderung der eingabe

    was müsste ich ändern, um ganze zahlen (die für das jeweilige ascii-symbol stehen) einzugeben?

    der computer soll mir praktisch bei der eingabe von '97' ein 'a' und bei '43' ein '+' etc... ausgeben.

  13. #13
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Zitat Zitat von darxun Beitrag anzeigen
    was müsste ich ändern, um ganze zahlen (die für das jeweilige ascii-symbol stehen) einzugeben?
    Du musst zumindest die Parameter von scanf() ändern.
    Wie genau, findest du selber raus.

  14. #14
    Registrierter Benutzer
    Registriert seit
    22.10.2006
    Beiträge
    76
    Bei diesem Code wird zwar eine ganze Zahl eingelesen, und auch als richtiges ASCII-Symbol ausgegeben.

    Code:
    #include <stdio.h>
    
    int main()
    {
    	unsigned char cASCII;
    
    			printf("\n\nBitte geben sie ein beliebiges Zeichen ein: ");
    
    		scanf("%d",&cASCII);
    
    			printf("\n-----------------------------------------------------------------");
    			printf("\n|\tASCII\t|\tDez.\t|\tHex.\t|\tOkt.\t|");
    			printf("\n-----------------------------------------------------------------");
    
    				/*d für Dez., X für Hex., o für Okt.*/
    
    			printf("\n|\t%c\t|\t%2d\t|\t%2X\t|\t%o\t|", cASCII, cASCII, cASCII, cASCII);
     			printf("\n-----------------------------------------------------------------\n\n");
     	
    	return 0;
    }
    Allerdings erscheint in einem Dialogfenster folgende Meldung:

    ------------------------
    Debug Error!

    Program: ...
    Module: ...igene Dateien/Visual Studio 2005/Projekts/SE23/debug/SE23.exe
    File:

    Run-Time Check Failure #2 - Stack around variable 'cASCII' was corrupted.
    -------------------------

    Was will mir mein Computer sagen? ;-)

  15. #15
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Dass du beim Einlesen mehr schreibst, als du solltest. Du hast ein unsigned char cASCII (1 Byte) und schreibst mehr als ein Byte, falls du eine Zahl > 255 eingibst.

    Damit überschreibst du möglicherweise andere Variablen.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •