Forum: PC-Programmierung kleines C problem


von holaco (Gast)


Lesenswert?

hallo leute, ich hab folgendes programm der zählen muss wieviele 
buchstaben ein wort enthält, es funktioniert leider nur wenn ich wörter 
eingebe die gerade eine anzahl von buchstaben hat. kann mir mal jemand 
helfen? danke im voraus.

#include<stdio.h>
void main()
{
  char text1[20];
  int i;

  printf("geben sie ein wort ein:\n");
  gets(text1);

  for(i=0;text1[i];i++)
    i++;
  printf("das wort hat %i buchstaben\n",i);
}

von Stefan Salewski (Gast)


Lesenswert?

for(i=0;text1[i];i++)
  i++;

iplussplus doppelt?

von NurEinGast (Gast)


Lesenswert?

for(i=0;text1[i];i++)
    i++;

hier wird "i" zweimal incrementiert.

von holaco (Gast)


Lesenswert?

mann mann ich habs übersehen, vielen vielen dank.

von Ich (Gast) (Gast)


Lesenswert?

> for(i=0;text1[i];i++)
>    i++;
>
> hier wird "i" zweimal incrementiert.

>> mann mann ich habs übersehen, vielen vielen dank.

Das springt doch eigentlich sofort ins Auge.
Was machst du denn bei >10000 Zeilen Code... ;-)

von Johnny (Gast)


Lesenswert?

Am besten Du gewöhnst Dir an, die geschweiften Klammern bei Schleifen 
etc. immer zu schreiben. Der Code wird übersichtlicher und man muss 
nicht immer überlegen, ob die nachfolgenden Zeilen ausgeführt werden 
oder nicht. Es sticht einem dann geradezu in die Augen ;-) Wenigstens 
hast Du die zweite Zeile mit dem i++; eingerückt, das ist schon mal ein 
Schritt in die richtige Richtung.

von P. S. (Gast)


Lesenswert?

Gross-/Kleinschreibung hilft dem Gehirn auch ungemein. Und 
Variablennamen mit mehr als einem Buchstaben...

von Timmo H. (masterfx)


Lesenswert?

Wieso für eine zählervariable mehr als einen Buchstaben nehmen? Ok in 
diesem fall könnte man wirklich count oder so nehmen aber egal. Ich 
hätte es so gemacht:
1
void main(){
2
  char text1[20];
3
  int i=0;
4
5
  printf("geben sie ein wort ein:\n");
6
  gets(text1);
7
8
  while(text1[i++]) ;
9
  printf("das wort hat %i buchstaben\n",i);
10
}

von Peter (Gast)


Lesenswert?

und hoffen das das Wort nicht länger als 20 Zeichen ist.
Da wird wohl bald der nächste Patch fällig sein.

von Volker (Gast)


Lesenswert?

... nicht länger als 19. Die /0 muß ja auch noch reinpassen :-)

von Timmo H. (masterfx)


Lesenswert?

Stimm für sowas sollte man lieber getch nehmen:
1
#define COMMAND_BUFFER 20
2
void main(){
3
  char debug[COMMAND_BUFFER];  /* Buffer für Debug-Kommando */
4
  unsigned char   i;
5
  
6
  printf("geben sie ein wort ein:\n");
7
  while(1){
8
    i = 0;
9
    do{
10
       debug[i] = getch();
11
       putc(debug[i]);      /* Echo */
12
       if(debug[i] == '\b' && i){  /* Backspace? */
13
         putc('\b');
14
         i--;        /* letztes Zeichen löschen */
15
       }
16
       else{
17
         i++;  
18
       }
19
       if(i >= COMMAND_BUFFER -1){  /* String zu lang */
20
         i = 0;
21
         printf("\nString zu lang!\n");
22
         continue;  
23
       }
24
       /* Schleife bei ENTER verlassen */  
25
     }while(debug[i-1] != '\r' && debug[i-1] != '\n');
26
     
27
     debug[i-1] = '\0';  /* Stringterminierung */
28
     printf("das Wort hat %i buchstaben\n",i-1);
29
30
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.