[C] Leerzeichen entfernen

Azi

Erfahrenes Mitglied
Hier bin ich wieder, und wieder habe ich ein Problem:
Ich möchte gerne, dass alle Leerzeichen einer Eingabe entfernt werden. Leider klappt das nicht so ganz, erstens wird die if-Abfrage nicht richtig erfüllt und zweitens ist, wenn String="hallo", String[1] nicht "a". Hier der Code:
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
 printf("Bitte geben Sie etwas ein!\n");
 char Eingabe[500];
 char Auswertung[500];
 fgets(Eingabe, sizeof(Eingabe), stdin);
 sscanf(Eingabe, "%s\n",Auswertung);
 int j = 0;
 char explode[500];
 int i=0;
 for(i=0;i<strlen(Eingabe);i++)
 {
    printf("Das Zeichen ist \"%c\", i ist %d \n",Auswertung[i],i);
    if(Auswertung[i]==' ')
    {
     printf("Leerzeichen!\n");               
    }
    else
    {
     explode[j]=Auswertung[i];
     printf("Kein Leerzeichen!\n"); 
     j++;
    }               
 }
 printf("Das eingegebene ohne Leerzeichen ist \"%s\"",explode);
 getchar();
 return 0;   
}
 
Hi

hier ist die lösung deines Programms habe alles so halbwegs Dokumentiert.

C:
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
   
       char Eingabe[500];
       char *ptr;
       int j = 0;
       char explode[500];
       int i=0;                     //variablen als global definiert da du in der main zuerst variablen 
                                    //definiert dann eingelesen hast und dann wieder welche definiert
                                    // hast was in C nicht legal ist.
      int main() {
   
       printf("Bitte geben Sie etwas ein!\n");
       fgets(Eingabe, sizeof(Eingabe), stdin);
                                              // sscanf wegelassen da es aufhört zu kopieren wenn ein leerzeichen auftritt!
       ptr = strrchr(Eingabe, '\n');
       *ptr = '\0';                  // das \n entfernen da es sonst stört.
       for(i=0;i<strlen(Eingabe);i++) {
  
         printf("Das Zeichen ist \"%c\", i ist %d \n",Eingabe[i],i);
        
         if(Eingabe[i]== (int)' ') // umwandlung in int
          {  
          printf("    Leerzeichen!");               
            
          }else{
          
           explode[j]=Eingabe[i];
  
           printf("   %i  Kein Leerzeichen!\n",Eingabe[i]);
  
           j++;
           }               
      }
  
       printf("Das eingegebene ohne Leerzeichen ist \"%s\"",explode);
       getchar();
  
       return 0;   
   }
 
Zuletzt bearbeitet:
Hi.
mike4004 hat gesagt.:
C:
       int i=0;                     //variablen als global definiert da du in der main zuerst variablen 
                                    //definiert dann eingelesen hast und dann wieder welche definiert
                                    // hast was in C nicht legal ist.
Das ist nicht richtig. In C99 ist das durchaus erlaubt.

Man sollte es vermeiden Variablen global zu definieren wenn es irgendwie möglich ist. Freilich macht das hier keinen großen Unterschied da es nur eine Funktion gibt, aber die Versuchung ist doch umso größer einfach nur noch Funktionen mit Nebeneffekten anstatt Parametern und Rückgabewert zu schreiben.

Gruß
 
Hi

echt in C ist es erlaubt.

habe ich gar net gewusst so dann hätte ich eine Frage gibt es irgentwo im I-net eine seite wo auf deutsch steht was seit C99 erlaubt ist?

mfg mike4004
 
Hmm, also bei mir klappt es nicht:
Code:
Bitte geben Sie etwas ein!
1 2 3 4 5
Das Zeichen ist "1", i ist 0
Kein Leerzeichen!
Das Zeichen ist " ", i ist 1
Kein Leerzeichen!
Das Zeichen ist " ", i ist 2
Kein Leerzeichen!
Das Zeichen ist " ", i ist 3
Kein Leerzeichen!
Das Zeichen ist " ", i ist 4
Kein Leerzeichen!
Das Zeichen ist " ", i ist 5
Kein Leerzeichen!
Das Zeichen ist " ", i ist 6
Kein Leerzeichen!
Das Zeichen ist " ", i ist 7
Kein Leerzeichen!
Das Zeichen ist " ", i ist 8
Kein Leerzeichen!
Das Zeichen ist " ", i ist 9
Kein Leerzeichen!
explode ist "1"

Edit: Moment, der erstellt die alte Version... deine klappt! Danke!
 
Zuletzt bearbeitet:
wenn ich dich richtig verstanden habe würde ich das ganze so lösen

Code:
# include <stdio.h>
# define ZEICHEN 500

main()
{
	int i,j,zaehler;
	char eingabe[ZEICHEN];
	char ohne[ZEICHEN];

	printf("Bitte geben Sie etwas ein\n");
	fgets(eingabe,ZEICHEN,stdin);
	for(zaehler=i=0;eingabe[i]!='\n';i++)
		if(eingabe[i]!=' ')
			ohne[zaehler++]=eingabe[i];
	puts(ohne);
}
 
Zuletzt bearbeitet:
Zurück