Problem bei Programm....
-
Na das können wir aber besser:
int zaehleWorte(const char *s) { int n,i=0; while( !sscanf(s,"%*s%n",&n) ) ++i,s+=n; return i; }
-
Erstmal noch vielen Dank für die ganze Hilfe!
Könnte mir vllt noch jmd sagen ob das nachfolgende Programm tadellos funktionert, da es mir gerade nicht möglich ist in die schule zu gehn um es dort zu starten...#include<stdio.h>
int anzahlwoerter(char *argument)
{
int i=0;
int zaehlerwoerter=1;
while(argument[i] != '\0')
{
if(argument [i] == ' ')
{
zaehlerwoerter ++;
}
i++;
}
return zaehlerwoerter;
}int anzahldera(char *argument)
{
int i=0;
int zaehlera=0;
while(argument[i] != '\0')
{
if(argument[i] == 'a' || argument[i] == 'A')
// es sollen sowohl kleine als auch große A's erkannt werden
{
zaehlera ++;
}
i++;
}
return zaehlera;
}int main(void)
{
int menuepunkt;
char zeichenkette[80];
do
{
printf("\n");printf("1. Textanalyse\n");
printf("2. Beenden\n\n");
printf(" Bitte gewünschte Funktion auswählen\n");
scanf ("%i",&menuepunkt);
if (menuepunkt == 2)
break;else
{
while (getchar() != '\n');
printf("Bitte geben Sie den Text ein: ");//scanf("%s", zeichenkette);
gets(zeichenkette);printf("Eingabe ist: %s /n",zeichenkette);
if(anzahldera(zeichenkette)< 5)
{
printf("Ihre Eingabe enthält weniger als 5 mal a");
}
else
{
printf("Ihre Eingabe enthaelt %i Woerter",anzahlwoerter(zeichenkette));
}
}
}while( menuepunkt!=2);return 0;
}Vllt hat noch jmd ein vorschlag für ein kommentar zur besseren verständnis, oder wo man noch ne leerzeile einfügen könnte oder ähnliches x)
-
Wenn du den Code noch in cpp Tags setzen würdest, schauen sicher ein paar mehr Leute drüber.
-
danke für den tipp, leider weiß ich nicht was das bedeutet
-
Racoon schrieb:
danke für den tipp, leider weiß ich nicht was das bedeutet
-
Hast du dich noch nicht gefragt, warum die anderen soschöne Listings hinkriegen?
Schon mal den rötlichen Kasten auf der Startseite vom C (C89 und C99)-Unterforum durchgelesen?
Wozu sind diese komischen Kästen unter den Smilies da?Schnellkurs:
Code markieren und auf den C/C++ Kasten unter dendrücken
-
oke vielen dank für die schnellen und kompetenten antworten
#include<stdio.h> int anzahlwoerter(char *argument) { int i=0; int zaehlerwoerter=1; while(argument[i] != '\0') { if(argument [i] == ' ') { zaehlerwoerter ++; } i++; } return zaehlerwoerter; } int anzahldera(char *argument) { int i=0; int zaehlera=0; while(argument[i] != '\0') { if(argument[i] == 'a' || argument[i] == 'A') // es sollen sowohl kleine als auch große A's erkannt werden { zaehlera ++; } i++; } return zaehlera; } int main(void) { int menuepunkt; char zeichenkette[80]; do { printf("\n"); printf("1. Textanalyse\n"); printf("2. Beenden\n\n"); printf(" Bitte gewünschte Funktion auswählen\n"); scanf ("%i",&menuepunkt); if (menuepunkt == 2) break; else { while (getchar() != '\n'); printf("Bitte geben Sie den Text ein: "); //scanf("%s", zeichenkette); gets(zeichenkette); printf("Eingabe ist: %s /n",zeichenkette); if(anzahldera(zeichenkette)< 5) { printf("Ihre Eingabe enthält weniger als 5 mal a"); } else { printf("Ihre Eingabe enthaelt %i Woerter",anzahlwoerter(zeichenkette)); } } }while( menuepunkt!=2); return 0; }
-
Sieht doch gleich hübscher aus.
Nimm statt
gets()
auf jeden Fall fgets, da musst du die Größe der Zeichenkette mit angeben.fgets(zeichenkette, 80, stdin);
Und schau nochmal nach den Einrückungen.
Man kann ganz schlecht erkennen obif(anzahldera(zeichenkette)< 5)
zu demelse
in Zeile 50 gehört oder nicht. Und wo ist dasif
zu demelse
?int anzahlwoerter(char *argument) { int i=0; int zaehlerwoerter=1; while(argument[i] != '\0') { if(argument [i] == ' ') { zaehlerwoerter ++; } i++; } return zaehlerwoerter; }
-
oke vielen Dank für die hilfreichen tipps, hat vllt sonst noch jmd ein verbesserungsvorschlag, unter anderem auch für irgendwelche kommentare zwischen den zeilen?
-
Wutz schrieb:
Führende und endende Leerzeichen, durch andere Whitespaces getrennte Wörter, mehrere Leerzeichen/Whitespaces aufeinanderfolgend, leerer String, ...