mit char in switch/case Anweisung bei C

Hallo

Ich bin gerade dabei C zu lernen und komme mit folgendem code nicht zurecht, vor allem weil er so in meinem Buch steht und ich ihn nicht compilieren kann.

Code:
#include <stdio.h>
#include <conio.h>

void main()
{
    char ch[1];
    printf("Eingabe: ");
    scanf("%s",ch);
    
    switch (ch)
     
     {
     case '.':  case ',':  case ';':  case ':':
     printf("Interpunktionszeichen\n");
     break;
     
     case '0':  case '1':  case '2':  case '3':  case '4':  case '5':  
     case '6':  case '7':  case '8':  case '9':  
     printf("Zahl\n");
     break;
     
     default: printf("sonstiges Zeichen");
     }
    
getch();
}

Kann mir bitte jemand weiterhelfen ich benutze "Dev-C", habe aber auch schon versucht den Code mit "Turbo C" zu kompilieren.
 
hallo,
probier mal char ch[2]

mfg
Peter

(P.S. wenn du zukünftigt hier im Forum Fragen zu Quellcodes hast wäre es nicht schlecht die Zeilennummer und den Fehlertext anzugeben)
 
@lastwebpage
Ok werd ich mir merken, beim nächsten mal poste ich den Fehlermeldung auch.

Das Problem hatt sich geklärt, es funktioniert wenn ich
Code:
switch (ch[1])
schreibe.
 
Hallo,
ich will jetzt nicht rummeckern aber was ist das für ein Buch?
Ist das mit einer Zeichenkette,Array wirklich so erklärt????

mfg
Peter
 
Stimmt du hast recht, wenn man dem compiler nicht mitteilt wieviele Platz in der char
Variable sein soll hatt sie automatisch für ein Zeichen Platz und mehr wird in diesem Fall ja
auch nicht benötigt. Das hatte ich vergessen, und da der Code in dem Buch erst mit der
"switch" Anweisung anfängt, habe ich den Fehler beim deklarieren der Variable "ch"
eingebaut.

Nur leider stürzt meine Eingabeaufforderung immer beim Ausfüheren des Codes ab wenn
ich bei der char Variable die benötigte Zeichenanzahl nicht angebe.
 
Hallo,
das meinte ich eigentlich nicht,
mich stört irgendwie dieses ch[1] !
Nehmen wir mal an du hättest die Zeichenkette ABC,das kannst du nicht in ein
array ch[3] speichern,ch[4] wäre besser!

mfg
Peter
 
also wie lastwebpage schon gesagt hat, wenn man char-arrays als stringspeicher benutzen will, braucht man immer eine länge von anzahl der zeichen + 1. die eine zusatzstelle wird zum terminieren der zeichenkette benötigt.

OT: falls du wirklich c lernen willst, kann ich dir nur raten gleich mit c++ anzufangen. man benötigt um c++ zu lernen keine grundlagen aus c! das sind 2 unterschiedliche sprachen.
char-arrays als strings zu benutzten macht man heute eigentlich nicht mehr. zu fehleranfällig, zu statisch, und und und; dazu sollte man echte strings benutzen.
(so genug werbung für c++ gemacht :D )
 
Hm..... ich habe gedacht, wenn ich erst anfange C zu lernen habe ich es später leichter
wenn ich C++ lernen will, da dies meine erste Programmiersprache ist, und ich mir erst mal
das logische Verständniss aneignen muss.
 
Hallo,
also der "Grundaufbau"
(If,for,switch,Arrays usw.)kannst du im Prinzip schon mit C lernen,
allerdings fehlt mir in diesen Büchern irgendwie die Objektorientierung.

mfg
Peter
 
Original von lastwebpage
also der "Grundaufbau"
(If,for,switch,Arrays usw.)kannst du im Prinzip schon mit C lernen,
allerdings fehlt mir in diesen Büchern irgendwie die Objektorientierung.
irgendwie ist gut :)
liegt wohl daran das C ne prozedurale (und C++ ne objektorientierte) sprache ist
von daher macht es wenig sinn Objektorientierung in einem buch über C zu behandeln
 
*GGGGRRRRRRRR*
Ich meinte damit nur das wenn er C++ lernen will,diese C Bücher nach meiner Meinung den Fehler machen das man z.B. jeden Parameter von Printf im Schlaf kann,aber nichts über Objekte weis. ;)

mfg
Peter
 
Na das ist ja jetzt zu ner richtigen Diskusion ausgeartet, aber auf jeden Fall werde
ich mein C Buch jetzt auch noch durcharbeiten, hatt immerhin 25? gekostet. Des
muss sich ja auch mehr oder weniger lohnen.
 
Das Problem hat sich zwar laut dir geklärt aber trotzdem will ich meinen senf noch abgeben.

scanf("%s",ch); eigentlich falsch! oder?
sollte doch so sein scanf("%s",&ch);

um dir das

switch(ch[1])

zu ersparen sreibst du bei der deklaration einfach

char ch;

in dieser var ist jetzt platz für genau ein zeichen und mehr brauchst du in deinem beispiel ja nicht.
dann funktioniert auch das

switch(ch)

mfg CusHi
 
Original von CusHi0n
scanf("%s",ch); eigentlich falsch! oder?
sollte doch so sein scanf("%s",&ch);
Bei den Beispielen die ich bis jetzt kenne wurde nie ein &-Zeichen vor der char variable
geschrieben, bei den anderen schon. Keine Ahnung warum man in diesem Fall kein &-
Zeichen benötigt, bei mir funktionierts jedenfalls.

Original von CusHi0n
zu ersparen sreibst du bei der deklaration einfach

char ch;

in dieser var ist jetzt platz für genau ein zeichen und mehr brauchst du in deinem beispiel ja nicht.
dann funktioniert auch das
Wenn ich die Variable so deklarier, bringt der Compiler zwar keine Fehlermeldung aber die
.exe stürzt beim Ausführen ab. Wahrscheinlich liegt dies an dev-C oder meinem System.
 
Hallo,
ich glaube du solltest dir mal scanf durchlesen %s liefert eine ZEICHENKETTE
%c EIN ZEICHEN!!!!
Du solltest dir das mit char und char[] auch nochmal durchlesen.

mfg
Peter
 
ein wirklich tolles buch, dass einem noch nicht einmal sagt das der Index bei 0 anfängt!
mit ch[1] definiert man ein array von einem char ( X( :richtig sinnvoll). also greift man mit
ch[0] auf das erste char des arrays.

scanf("%s",ch); eigentlich falsch! oder?

es ist richtig, da der array name ohne die eckigen klammern für die startadresse steht
 
Also dem kann ich nur zustimmen, wenn mich meine Kenntnisse nicht über Nacht verlassen haben erinnere ich mich noch an folgendes:

char c = 'a';

ist das selbe wie

char c[1];
c[0] = 'a';

Mir schwankt auch noch eine Regel in Erinnerung: Der Name eines Arrays ist ein Zeiger auf sein erstes Element.

Mfg
 
Zurück
Oben