Problem mit Escape-Sequncen in C - Help!

Diskutiere das Thema Problem mit Escape-Sequncen in C - Help! im Forum Mac OS Entwickler, Programmierer

  1. Thomas_xp

    Thomas_xp Thread Starter Mitglied

    Beiträge:
    627
    Zustimmungen:
    12
    Mitglied seit:
    05.04.2006
    In C (Porgrammierung) soll eine Zeichenfolge die mit einem ENTER "eingegeben" wird (also "ajfajsffa" "Enter") weiterverarbeitet werden. Dazu möchte ich eine while-Schleife starten die alle Zeichen aus dem Buffer liest bis keines mehr da ist. Ich dachte an soetwas:
    while(x=(getc(stdin)!=CR))

    Dabei ist CR ja das ASCII "Enter" bzw Zeilenumbruch. Nun wird das aber nicht erkannt! EOF wird erkannt, aber alle Escapesequencen aus ASCII nicht.
    Was mache ich falsch?

    Die while-Schleife soll beendet werden, sobald keine richtigen Zeichen mehr im Buffer sind. Außerdem wird das geholte Zeichen, welches sich auf X befindet noch auf gewisse eigenschaften geprüft.
     
  2. Deever

    Deever Mitglied

    Beiträge:
    35
    Zustimmungen:
    2
    Mitglied seit:
    19.07.2007
    Hm? Was zum Deibel ist denn CR? Wo ist das definiert/deklariert?
    Und vermutlich meinst du eher
    Code:
    while ((x=getc(stdin))!='\n') { foobar(x); }
    Gruß && HTH,
    /dev
     
  3. allan

    allan Mitglied

    Beiträge:
    274
    Zustimmungen:
    14
    Mitglied seit:
    07.02.2008
    CR = carriage return = Naechste Zeile ;)
     
  4. Deever

    Deever Mitglied

    Beiträge:
    35
    Zustimmungen:
    2
    Mitglied seit:
    19.07.2007
    Aha. Und funktionierts jetzt? ;)

    Gruß,
    /dev
     
  5. Thomas_xp

    Thomas_xp Thread Starter Mitglied

    Beiträge:
    627
    Zustimmungen:
    12
    Mitglied seit:
    05.04.2006
    Das {foobar(x);} hat hier keinen Einfluss auf die while-Schleife und sollte nur ein Beispiel sein richtig?

    Habe es mit CR versucht ohne Erfolg. Auch \n hat nicht gefuntz. Ich probiere es mal mit '\n'.....
    Danke für eure Hilfe.
     
  6. allan

    allan Mitglied

    Beiträge:
    274
    Zustimmungen:
    14
    Mitglied seit:
    07.02.2008
    Ja foobar(x) soll nur darstellen das du etwas tust :jaja:

    wir wissen ja nicht wie deine funktion aussieht ;)

    gruß
    Allan
     
  7. Thomas_xp

    Thomas_xp Thread Starter Mitglied

    Beiträge:
    627
    Zustimmungen:
    12
    Mitglied seit:
    05.04.2006
    Ok..... Jetzt bin ich schon einen Schritt weiter. Das mit dem '\n' funktioniert...... Nun hab ich ein weiteres Problem....
    PHP:
    while(X=getc(stdin)!='\n'){
    if(
    i=0){    if(X>='a' && X<='z'){printf("ja");}
                else 
    printf("NO");
            }
    else    if((
    X>='a' && X<='z')|| X>=&& X<=9)){printf("ja");}
            else 
    printf("NO");
        }
    Das "Interval" von klein a bis klein z wird nicht richtig abgefragt. Er erkennt nicht dass ich das Interval meine. Ich DARF hier nicht mir den ASCII Nummern arbeiten, weil ich nicht sicher Stellen kann, dass ASCII verwendet wird. Ich muss also wirklich auf Buchstaben testen. Und eine Switchanweisung mit 26 Einträgen zu machen ist mir zu blöd.

    Der Code ist nur ein Auszug. Das i wäre ein Zähler mit dem ich später prüfe ob die Zeichenkette die richtige Länge hat und ob das erste Zeichen ein Kleinbuchstabe ist...
     
  8. Marduk

    Marduk Mitglied

    Beiträge:
    499
    Zustimmungen:
    34
    Mitglied seit:
    13.10.2003
    Du solltest dir unbedingt Gedanken machen, wie du deinen Code anständig anzeigst.

    Ich habe mal deinen Code genommen und ihn sauber dargestellt. Ich habe NUR Tabulatoren, Abstände und Umbrüche verändert. Das heisst dieser Code den hier dargestellt ist, ist genau der gleiche:
    Code:
    while(X=getc(stdin)!='\n'){
    	if(i=0){
    		if(X>='a' && X<='z'){printf("ja");}
                    else printf("NO");
            }
    	else if(X>='a' && X<='z'){printf("ja");}
    	else printf("NO");
    }
    
    Willst du wirklich das?
    Das ist im übrigen gleich bedeutend zu
    Code:
    while(X=getc(stdin)!='\n'){
    	if(X>='a' && X<='z'){printf("ja");}
    	else printf("NO");
    }
     
  9. Thomas_xp

    Thomas_xp Thread Starter Mitglied

    Beiträge:
    627
    Zustimmungen:
    12
    Mitglied seit:
    05.04.2006
    Ich hab es etwas abgeändert.... schau noch mal nach oben Marduk...

    Ich verstehe nicht ganz, warum das Intervall von a-z nicht richtig erkannt wird.
     
  10. Marduk

    Marduk Mitglied

    Beiträge:
    499
    Zustimmungen:
    34
    Mitglied seit:
    13.10.2003
    Die if abfrage ist richtig. Nur steht halt in X nicht ein charakter zwischen a-z. (Kannst ja mal Testen in dem du einen anderen Char Y auf einen Wert wie 'a' setzt und dann die if-abfrage machen).
    Geh mal einbisschen Googlen und Tutorials suchen wie man in C richtig von stdin liest. So kann das nicht recht gehen.
     
Die Seite wird geladen...

MacUser.de weiterempfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Akzeptieren Weitere Informationen...