Problem mit Pointer / Code

  • Themenstarter Themenstarter ByeBye 249714
  • Beginndatum Beginndatum
B

ByeBye 249714

Code:
#include <stdio.h>

char chareinlesen()
{
    char erg; 
    char str[24]; 
    
    fgets(str,24,stdin);                           
    erg=strlen(str)-1;   
    if(erg>=0&&str[erg]=='\n')str[erg]='\0';         
    else{while(fgetc(stdin) != '\n');}               
    return erg; 
}

void ersetze_zeichen(char *text, char alt, char neu){
     int i,x;
     x=strlen(text);
     for(i=0; i<x; i++) if (text[i]==alt) text[i]=neu;
                       
     while(text[x]) putchar(text[x++]);
}

int main()
{
  char alt, neu, text[80];

  printf("Geben Sie einen Text ein: ");
  gets(text);

  printf("Geben Sie ein Zeichen ein, woraufhin der Text untersucht werden soll: ");
  alt=chareinlesen();
  
  printf("Geben Sie ein Zeichen ein,\nwelches an die Stelle des zuvor eingebenen Zeichens platziert werden soll: ");
  neu=getchar();
  
  ersetze_zeichen(text, alt, neu);
  
  printf("\n\n");
  
  system("PAUSE");	
  return 0;
}

Das Programm soll einen Text einlesen sowie 2 Zeichen, wobei das erste Zeichen im Text gesucht und dann durch das 2. ersetzt werden soll.
Mein Problem scheint bei der Funktion "void ersetze_zeichen(char *text, char alt, char neu)" zu liegen, aber ich sehe nicht was ich falsch gemacht habe.

EDIT: Ok, wo ich es so nochmal vor mir sehe... das "x" in " while(text[x]) putchar(text[x++]);" muss schonmal durch i ersetzt werden, und i=0 vor dieser while-Schleife gesetzt werden, aber der Text wird nicht verändert dargestellt
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

Code:
void ersetze_zeichen(char *text, char alt, char neu){
    int x = strlen(text);
    for(int i=0; i<x; i++){
        if (text[i]==alt){
            text[i]=neu;
        }
        while(text[i]){
            putchar(text[i++]);
        }
}

Vielleicht erkennst du es jetzt besser ;)
 
EDIT: Ok, wo ich es so nochmal vor mir sehe... das "x" in " while(text[x]) putchar(text[x++]);" muss schonmal durch i ersetzt werden, und i=0 vor dieser while-Schleife gesetzt werden, aber der Text wird nicht verändert dargestellt


Du hast die Bedeutung des Codes völlig verändert. Bitte lerne nochmal die Grundlagen von C.

Hab ich das falsch verstanden?

Edit: okay, ich war wohl etwas zu voreilig, entschuldige bitte ;)
 
Zuletzt bearbeitet:
So sieht die Funktion aus:

Code:
void ersetze_zeichen(char *text, char alt, char neu){
     int i,x;
     x=strlen(text);
     for(i=0; i<x; i++) if (text[i]==alt) text[i]=neu;
     i=0;                 
     while(text[i]) putchar(text[i++]);
}

Die stimmt auch soweit (für das, was ich möchte, vielleicht hast du mich falsch verstanden).

Du liest etwas falsches ein. Überprüfe (im Debugger) die Werte von alt und neu.

Ich versuche gerade mit dem Debugger von Dev-C++ zurechtzukommen, der Fehler liegt aber in folgendem Teil:

Code:
char chareinlesen()
{
    char erg; 
    char str[24]; 
    
    fgets(str,24,stdin);                           
    erg=strlen(str)-1;   
    if(erg>=0&&str[erg]=='\n')str[erg]='\0';         
    else{while(fgetc(stdin) != '\n');}               
    return erg; 
}

Ah, klar.. so kanns ja nicht klappen, so müsste es glaube ich lauten:

Code:
char chareinlesen()
{
  
    char erg; 
    char str[24];
    do 
    {
        fgets(str,24,stdin);                          
        erg=strlen(str)-1;   
        if(erg>=0&&str[erg]=='\n')str[erg]='\0';         
        else{while(fgetc(stdin) != '\n');}               
    }while(1!=sscanf(str,"%c",&erg));
    return erg; 
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück