Frage zu C-Programm das die Zeichenanzahl, die eingeben wird, wieder ausgibt

weil du allein schon technish falsch nach der vom User eingegebenen Zeile fragst, naemlich 2 mal: eimal mit der scanf und einmal mit der gets Methode

und zwar wird nicht das letzte sondern das erste Wort ignoriert. Es passiert folgendes:
scanf will formatierten Text in Form von "%s" einlesen. %s bedeutet nicht nur ein String, es bedeutet (nur) ein Wort! *dinggg* ;) Nachden scanf das erste Wort von der Tastatur in "satz" eingelesen hat, kommt gets und holt sich den Rest, ueberschreibt dabei "satz". So steht in "satz" alles, minus das erste Wort.

lass scanf einfach weg und es sollte laufen
 
vielleicht hat "stdin" noch was uebrig von einer vorherigen Eingabe (z.B. von dem DOS-Fenster).

falls das der Fall ist sollte
Code:
fflush(stdin);
vor dem get() Aufruf eine Loesung sein.

andernfalls keine Ahnung :p
 
Tausend Dank, an dem Problem hab ich schon über eine Woche gesessen und keine Lösung gefunden..

(Ich bin aber noch ein blutiger Anfänger, hab erst seit 12 Wochen Kenntnis in C)
 
Hallo,
ich habe noch eine letzte Frage...

Also mein Programm ist so aufgebaut, das ich einmal ein Hauptmenü habe, in dem ich frage ob der Text auf Zeichen oder seine Wörteranzahl analysiert werden soll...

Nun möchte ich noch eine Anweisung einbauen, die das Programm immer wieder zurück auf das Hauptmenü springen lässt, also wenn ich bei 1) fertig bin, das dann gefragt wird, nochmal analysieren oder beenden..

Ich habe jetz eine kleine Funktion geschrieben, die ich eingebaut habe und deren Eingabe ich dann einlesen lasse..

Aber wie kann ich diese eingelese Zahl (in dem Fall wieder 1,2...) den einzelnen Anweisungen zuordnen? Also z.B. 1) wieder Zeichenanalyse 2) Zeichen und 3) Beendung des Programms?

Mit If oder switch bekomme ich es einfach nicht gebacken..

Frohe Weihnachten!
 
Der Programmfluss (z.B. Wiederholungen) muss nur in Anweisungen (while/for) uebersetzt werden. Abbruchbedingungen koennen auch mittendrin gestellt werden mit break;. Flussspaltungen wie mit oder ohne Leerzeichen entsprechen dem if/switch. Da das nur eine Konsolenanwendung ist sieht das Ergebniss sogar einfach aus.
etwas Pseudocode zum wachwerden ;) :

Code:
// showMenu() gibt die Wahl zurueck, 1-mit leerzeichen, 2-ohne, 3-abbrechen
// die anderen Funktionsnamen sollten selbsterklaerend sein .. hoffe ich mal

while(true) // die Schleife
{
  int wahl = showMenu();
  if(wahl == 3) // die Abbruchbedingung
    break;
  getInput(); // diese Zeile wird beim Menuepunkt 1 und 2 ausgefuehrt
  switch(wahl)
  {
    case 1:
      showResult(countCharacters());
      break;
    case 2:
      showResult(countLetters());
      break;
  }
  // hier gehts wieder von vorne los und ins Menue
}

Haupsache die Anweisungen entsprechen der Logik deiner Aufgabe. Deswegen z.B. habe ich ein switch(wahl) benutzt anstelle von if(wahl==1), weil das hier keine ja/nein Frage ist sondern eine Fallunterscheidung. Aber das ist keine Pflicht, jeder programmiert im Endeffekt eh so wie er mag :D
 
Danke für die exemplarische Hilfe, ich werd nachher mal das Programm anpassen..

Falls es Probleme gibt, meld ich mich nochmal..
 
Das was Pixelshader dir gegeben hat, war ja nur Pseudocode :rolleyes: :)
mit showMenu meint er, dass du entweder selber eine Funktion showMenu schreibst, die den Benutzer etwas wählen lässt,
oder die Zeile einfach durch die Frage, was er braucht, zu ersetzen.
in der Variable sollte danach der Wert stehen...

also zb

int wahl;
printf("1 Mit Leerzeichen\n");
printf("2 Ohne Leerzeichen\n");
printf("3 Ende\n");
scanf("%d",&wahl);

gruß
 
Zuletzt bearbeitet:
Ja mein Programm sieht grob so aus:

Menü
1)Buchstabeanalyse
1.1) Bestimmtes Zeichen (noch nicht fertig)
1.2)Liste aller Zeichen A-Z

2)Zeichenanalyse

3)Wörteranzahl(noch nicht fertig)

Und nach dem Menü läuft meine eigentliche If anweisung (1,2,3)

und dann noch bei 1) ein switch befehl..

Nur wie bau ich da jetz die zweite Auswahlschleife ein?
 

Neue Beiträge

Zurück