kleines C problem

Gast #1024758
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);
}
Gast #1026389
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... ;-)
Gast #1026451
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.
#1026617
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
}
#1026632
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren