C scanf("%c", blabla); macht Probleme

hausel

Lt. Junior Grade
Registriert
Feb. 2010
Beiträge
273
Tagchen zusammen;
Ich bin total C-Anfänger und kämpfe mich momentan so durch.
Zu meinem Problem. Die Aufgabenstellung lautet:

Schreiben Sie ein Programm mit einer Funktion, die in einer Zeichenkette ein Zeichen sucht und es jeweils durch ein anderes ersetzt. Benutzen Sie den folgenen Prototyp der Funktion zur Lösung der Aufgabe:

void func(char *ptr, char alt, char neu);


Mein Programm funktioniert ja auch soweit, nur leider habe ich es nur hinbekommen wenn ich der Funktion Char-Strings übergebe statt eine normales Char-Zeichen. Jedesmal wenn ich mehrere Charzeichen einlesen(2x scanf("%c", charzeichen);" will kommt der Compiler irgendwie durcheinander und behält nur das letzte eingelesen Char-Zeichen.

Ich hoffe hier kann mir jemand helfen. Falls sonstige Verbesserungen sinnvoll wären nur her damit :)

Vielen Dank im Voraus
hausel

Code:
void func(char *ptr, char[], char[]);

int main()
{
char string1[10];
char alt[10];
char neu[10];
char *ptr;

printf("Gebe String ein: ");
scanf("%s", &string1[0]);
printf("Gebe Suche ein: ");
scanf("%s", &alt[0]);
printf("Gebe Ersetze ein: ");
scanf("%s", &neu[0]);

ptr = &string1[0];
func(ptr, alt, neu);

printf("%s", string1);

system("PAUSE");
return 0;
}
void func(char *ptr, char alt[], char neu[])
{
int i;
for (i=0; i<strlen(ptr); i++)
    {
    if (*(ptr+i) == alt[0])
       {
       *(ptr+i) = neu[0];
       break;
       }
    }
}
 
gibt es da etwas gleiches für UNIX? denn wenn ich unter osx fflush verwende kennt das der gcc nicht ... da muss ich dann immer irgendwie anders tricksen oder einen string einlesen und dann nur das erste zeichen verwenden wenn dieses kein \n ist.

geht das auch unter unixoiden etwas eleganter?

-gb-
 
char zeichen;
scanf("%c", &zeichen);
getchar();

vielleicht funktionierts damit?
mir kommt vor, das hätte ich so gelernt. das sollte den eingabepuffer leeren!
 
Zuletzt bearbeitet:
edit:

getchar(); hat es tatsächlich gelöst! wunderbar! Vielen Dank!

-gb-
 
Zuletzt bearbeitet: (JUHU!!!!)
ich könnte mir denken, dass fflush die ganze stdin leert, also egal wieviele zeichen drinnen stehen. während getchar nur ein zeichn aus dem puffer rausliest. in meinem fall genügt das aber da getchar hier das \n liest das noch drinnen steht.

... aber vielleicht passiert in wirklichkeit etwas ganz anderes^

-gb-
 
freut mich, dass ich das alles nicht umsonst gelernt hab :D !

man schreibt übrigens:
"gib string ein:"
"gib suche ein:" und
"gib ersatz ein:"
:)
 
Der Grund, warum fflush(stdin) nicht zwangsläufig funktioniert ist ganz einfach:
Die Funktion fflush ist im C-Standard nur für Output-Streams definiert. Wenn der Compiler die Benutzung trotzdem zulässt, ist nicht garantiert, dass es zuverlässig auf jedem System läuft. Deswegen sollte man dessen Benutzung unbedingt vermeiden.

Hier gibt's eine gute Anleitung, wie man's richtig machen kann.
 
Hi Leute,

wenn es in C darum geht den Eingabestrom zu leeren verwend ich eigentlich immer:

while(getchar() !='\n'){}

Hat bisher immer perfekt funktioniert.
 
Zurück
Oben