|
|
|
|
Mehrere Worte mit scanf() in verschiedene Variablen ablegen |
Deef
...
Dabei seit: 24.08.2002
Beiträge: 431
|
|
Hmm ich weiß nicht ob ich Dich richtig verstehe ...
scanf("%s %s %s", var1, var2, var3);
Ich hab aber irgendwann mal gelernt, das man Zeichenketten nicht mit scanf einlesen sollte, da daß alles liest bis zum nächsten blank ...
Ich glaub mich zu erinnern, dass die alternative fscanf heisst, aber diese Angabe ist ohne Gewähr
__________________ Was sagen uns Signaturen?! 1.Ich kann Latein 2.Ich bin umheimlich tiefgründig 3.Ich kann googlen 4.Ich lese die Lyrics der Lieder die ich höre 5.Ich schreibe und denke mir Scheisse aus die keiner lesen will...
|
|
10.03.2003 07:26 |
|
|
byteworm
Aufsteiger
Dabei seit: 09.10.2002
Beiträge: 31
Themenstarter
|
|
mit fscanf liest man aus einer datei nicht aber von der tastatur was ein. und das mit dem
scanf("%s %s %s", var1, var2, var3);
ist scheiße weill man ja 3 wörter eintippen muss, ich meine aber was anderes. nämlich das jedes wort in ner extra variable gespeichert wird ohne das vorgegeben ist wie viele wörter man einzutippen hat.
|
|
10.03.2003 13:43 |
|
|
Deef
...
Dabei seit: 24.08.2002
Beiträge: 431
|
|
Also direkt zu Deinem problem kann ich Dir leider nicht helfen, aber du kannst mit fscanf genau so von der Tastatur lesen wie aus einer Datei.
Mein Prof erzählte damals, dass es irgendwann man einen Angriff gab, wo ein programm mit scanf gelesen hat und der angreifer "einfach" ein eigenes Programm einlesen lassen hat (solange keine white spaces drin sind liesst scanf ja immer weiter)
Was davon stimmt kann ich allerdings nicht sagen *g*
__________________ Was sagen uns Signaturen?! 1.Ich kann Latein 2.Ich bin umheimlich tiefgründig 3.Ich kann googlen 4.Ich lese die Lyrics der Lieder die ich höre 5.Ich schreibe und denke mir Scheisse aus die keiner lesen will...
|
|
10.03.2003 14:38 |
|
|
LX
El Comandante en Jefe
Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx
|
|
Warum lässt du net einen ganz normalen String mit scanf() komplett einlesen und spaltest den danach an den Spaces in Teilstrings auf? Weiß jetzt net im Kopf, ob's da in C eine fertige Funktion dafür gibt, ansonsten machst du's eben von Hand (so schwer isses ja net).
__________________ JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett
|
|
10.03.2003 14:49 |
|
|
Deef
...
Dabei seit: 24.08.2002
Beiträge: 431
|
|
Weil scanf() an einem space aufhört zu lesen ;o)
bei fscanf() kann man zusätzlich die länge angeben, die gelesen werden soll.
__________________ Was sagen uns Signaturen?! 1.Ich kann Latein 2.Ich bin umheimlich tiefgründig 3.Ich kann googlen 4.Ich lese die Lyrics der Lieder die ich höre 5.Ich schreibe und denke mir Scheisse aus die keiner lesen will...
|
|
10.03.2003 14:58 |
|
|
byteworm
Aufsteiger
Dabei seit: 09.10.2002
Beiträge: 31
Themenstarter
|
|
@LX, wie mach ich das den, einen string in teilstringe spalten ???
|
|
10.03.2003 15:49 |
|
|
qwartz8051
Neuling
Dabei seit: 10.03.2003
Beiträge: 5
Herkunft: DatenLeitung
|
|
Also wenn es um ANSI C geht
würde ich es so machen
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
|
char *eingabe;
char *texte[25];
int i;
i=0;
while(eingabe!="")
{
clrscr();
gets(eingabe);
texte[i]=eingabe;
i++;
}
|
|
So oder so ungefähr....
__________________ __Nichts_ist_wie_es_scheint__
~~~~~~~~~~~~~~~~~~~
Ich habe keine Feinde
Ich absolviere keinen Kriege
Ich clone keine Monster
Ich kaufe keine Dorgen
Ich erstelle keine Waffen
Ich respektiert andere Menschen
~~~~~~~~~~~~~~~~~~~~~
|
|
10.03.2003 19:41 |
|
|
byteworm
Aufsteiger
Dabei seit: 09.10.2002
Beiträge: 31
Themenstarter
|
|
@qwartz8051, wenn ich deinen code compiliere gibt es zwar keine fehler, aber wenn ich das programm dan starte und ein paar worte eintippe stürtzt das programm ab.
|
|
10.03.2003 21:06 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
|
10.03.2003 21:19 |
|
|
Compuholic
knows where he wants to go tomorrow
Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München
|
|
Der Code von qwartz8051 enthält offenbar ein grundlegendes Verständnisproblem bei Zeichenketten.
Wenn ich eine Variable für eine Zeichenkette von z.B. 20 Zeichen benötige, dann benutze ich "char eingabe[21]". Das bedeutet, das ich 21 Bytes an Speicher reserviere, von denen jedes ein Zeichen aufnehmen kann. Das ganze ist also ein stinknormales Array. (Kurze Anmerkung: Man mag sich vielleicht wundern, warum ich 21 Bytes reserviere. Das liegt daran, das man ja noch 1 NULL-Byte einplanen muß, mit dem die Zeichenkette terminiert wird.)
Wenn ich eine Variable deklariere und dem Variablennamen ein * voranstelle, wird nicht Speicher für die Zeichenkette reserviert, sondern es wird Speicher für einen Wert reserviert, der eine Speicheradresse enthält (ein sog. Zeiger). "char *eingabe" kann also selbst keinen Zeichen aufnehmen, sondern nur eine Speicheradresse, die auf die Anfangsadresse der Zeichenkette zeigt.
Wenn ich jetzt also z.B. "int *eineZahl" deklariere und im Programm "eineZahl = 1" zuweise, meine ich damit, das die Variable "eineZahl" auf die Speicheradresse 0x00000001 zeigt (die ungültig ist). Das geht solange gut, wie ich das im ganzen Programm konsequent falsch mache (da eine Variable vom Typ int genausoviel Speicher belegt wie ein Zeiger auf eine Speicheradresse (int *). Da Speicheradressen immer 32-Bit breit sind, hilft der Zufall, das das Programm nicht abstürzt.)
Kritisch wird es, wenn mann versucht nicht den Wert der Variable zu lesen, sondern von der Speicheradresse auf die sie zeigt. Das nennt man dann Dereferenzierung. Ein Beispiel:
code: |
1:
2:
3:
4:
5:
6:
7:
|
int i = 20; //Eine Variable mit dem Wert 20 deklarieren
int *a; //Eine Zeigervariable deklarieren
a = &i; //Zeigervariable a nimmt die Speicheradresse von i auf
printf("%d", a); //gibt den Inhalt der Zeigervariable aus (eine Speicheradresse)
printf("%d", *a); //gibt den Inhalt der Adresse aus, auf die a "zeigt"
|
|
Nicht mißverstehen. Das soll nur eine kurze Erklärung zu Zeigern sein und keinerlei persönliche Kritik. Ich weiß, das Zeiger ein für Anfänger schwieriges Thema sind. Das mag am Anfang etwas verwirrend sein. Aber man gewöhnt sich schnell daran.
|
|
10.03.2003 23:20 |
|
|
byteworm
Aufsteiger
Dabei seit: 09.10.2002
Beiträge: 31
Themenstarter
|
|
Und wie kann ich jetzt mit einer scanf oder gets anweisung jedes wort in einer extra variable speichern ???
|
|
10.03.2003 23:56 |
|
|
Flanders unregistriert
|
|
Ich habe mir das, was oben steht jetzt nicht alles durchgelsen, aber mit Scanf kannst du nur eine Tastatur eingabe auslesen und in eine Variable speichern z.B.
(...)
printf("\nGeben Sie eine Zahl ein");
scanf("%i", &Eingabe);
(...)
In der Variabel "Eingabe" , die du natürlich vorher deklarien muss, steht nun die Zahl drin , die der Benutzer eingegeben hat.
|
|
11.03.2003 15:41 |
|
|
|
|
|
|