PCMasters Hardware Forum > Software > GFX, Webdesign und Programmierung > Seite 8 > [C] scanf("%c", blabla); funktioniert nicht

Im PC Forum registrieren


Produktsuche
IDEALO-PRODUKT-SUCHE
idealo preisvergleich
PCM News & Reviews
Antwort
 
 
Alt 24.02.2010, 11:38
Benutzerbild von hausel
Threadersteller
hausel
 
Standard

[C] scanf("%c", blabla); funktioniert nicht



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;
       }
    }
}
Alt Heute
Hardware Bot
Computer Informationen
 
Diese Werbung wird registrierten
Mitgliedern nicht angezeigt.
Werden Sie noch heute kostenlos Mitglied
auf PCMasters.de
Standard Weitere Informationen

 
Alt 24.02.2010, 15:01
pixelflat
 
Standard

Zitat:
Zitat von hausel Beitrag anzeigen
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.
Das liegt imho daran, dass beim ersten scanf() nur ein Zeichen eingelesen wird, das "\n" (du dürckst ja Enter) aber noch im Puffer bleibt. Beim nächsten scanf() wird dann dieses \n eingelesen, anstatt dem nächsten Buchstaben.

Lösung ist den Eingabe-Puffer vorher zu leeren. Dafür gibts viele Möglichkeiten, unter Windows wäre fflush(stdin); die einfachste. Das ist zwar nicht wirklich die beste Möglichkeit (siehe ]), aber in Anbetracht der Tatsache, dass du auch scanf() zum Einlesen von Strings benutzt (Buffer Overflow!) sollte die Funktion ausreichen...

Geändert von pixelflat (24.02.2010 um 15:48 Uhr).
 
Alt 24.02.2010, 15:40
Benutzerbild von hausel
Threadersteller
hausel
 
Standard

hmkay, danke Dir. Hat super geklappt
 
Alt 25.02.2010, 00:52
Benutzerbild von LordOfThePings
LordOfThePings
 
Standard

Du sollst aber eigentlich für alt und neu nur einzelne chars einlesen, zumindest laut dem gegebenen Prototypen (der erwartet kein char[], sondern nur char!).

probier für die mal
char alt, neu;
scanf("%c",&alt);
scanf("%c",&neu);

fflush musst du wohl trotzdem verwenden.
 
Alt 25.02.2010, 08:21
Benutzerbild von hausel
Threadersteller
hausel
 
Standard

du hast schon recht Hast vllt nicht ganz genau mein ersten Beitrag gelesen. Ich habe nicht von diesem "fflush" gewusst. Deswegen konnte ich die Aufgabe nur mit char[] lösen.
Das war ja dann auch meine eigendliche Frage. Trotzdem Danke
 
Alt 10.03.2010, 21:08
Benutzerbild von PowidL
PowidL
 
Standard

Was ich an deinem code nicht genau verstehe ist. Warum du einen dynamischen Characterpointer nimmst. Du könntest theoretisch da dein string1 10 Zeichenlang ist einfach die anderen an deinen String dran hängen. und das ptr sparen. Naja reine förmlichkeiten^^
 
Alt 10.03.2010, 21:31
pixelflat
 
Standard

Viele Wege führen nach Rom.

Wenn er aber den Text mit Call by Value an die Funktion übergibt muss er den String am Ende auch wieder zurück geben (er will ihn ja in der main() verwenden). Das bedeutet, er muss bei einem 10 Zeichen langen String (ein Char hat 1 Byte) zwei Mal 10 Byte kopieren. Mit einem Pointer sind das nur einmalig 4 Byte. Würde er die Funktion jetzt hundert mal benutzen wäre das schon ein entscheidender Unterschied.

Außerdem ist das C/C++ - da muss in jede Funktion mind. ein Pointer rein.
 
Alt 10.03.2010, 21:42
Benutzerbild von PowidL
PowidL
 
Standard

Ja da hast du schon recht. Weiß jetzt nicht was "bitsparender" ist, ein return str oder ein charpointer^^

Was ja auch kurios ist warum er 10 Zeichen lange strings verwendet, wenn er nur einen character einliest. Geht ja auch ein einfacher char und ein "getc()" statt einem "scanf()".
hardware forum Neue Frage stellen?
Kurze Zusammenfassung der Frage:
Bitte wählen Sie eine Kategorie:
Mailadresse:
Ihre Frage:
Ihre Frage wird als Gast gespeichert. Sollte eine Antwort im Forum erfolgen, bekommen Sie diese per Email zugeschickt.


Zufällige Frage
Um auf dieses Thema zu ANTWORTEN
bitte sich zuerst » hier kostenlos registrieren!!

Antwort

Tags: , ,

Ähnliche Tags: , , ,


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Internet funktioniert nicht trotz DSL-Verbindung XaliadE Hardware Allgemein 2 22.08.2009 23:28
Bluetooth funktioniert nicht mehr! crazyjoda Monitore und PC-Peripherie 1 22.08.2008 21:28
internet bei vista funktioniert nicht!!! madsen Betriebssysteme 2 01.03.2008 16:24
Funktioniert die 8600 bei mir ? Huey Hog Grafikkarten 4 26.12.2007 21:06
Funktion des Geldes o. Wie funktioniert Geld? DagoDuck Off-Topic 2 03.07.2007 16:59


Sie betrachten gerade: [C] scanf("%c", blabla); funktioniert nicht


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr.



Im PC Forum registrieren