"We are back" « oc.at

text einlesen in c++

moidaschl 12.12.2002 - 16:26 2371 47
Posts

M.I.P.S.

Big d00d
Avatar
Registered: Mar 2002
Location: On the inside
Posts: 324
int scanf(const char *format, [Argumente]) verlangt als Argument einen Pointer auf eine Variable. Wenn du eine Variable übergibst, wandelt er den Inhalt der Variable in eine Speicheradresse um und speicher den eingelesenen Wert an der entsprechenden Stelle.

Wenn du einen Array (Pointer) in scanf verwendest, brauchst du den &-Operator nicht.
Wenn es ein Primitiver Datentyp wär (int, float...) würdest du bei scanf das & brachen.

edit: ge0wnt; mist ich hab einen delay :(
Bearbeitet von M.I.P.S. am 12.12.2002, 22:22

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
Zitat von FMFlash
bei einfachen elmenten übergibt man die addresse

char x;
scanf ("%s", &x);

bei arrays den pointer

char x [1024];
scanf ("%s", x);

... Nagel auf den Kopf getroffen :)

Duron

Here to stay
Avatar
Registered: Aug 2000
Location: /home
Posts: 3182
was tutsn da rum?

ich würds so machen:
---------------------------------
char text[40];
cin>>text;
cout<<text;
getch();
---------------------------------

edit: hab grad gemerkt dass es so nur eine zeichenkette einliest.
hab seite einem dreiviertel jahr nicht mehr c programmiert :(
Bearbeitet von Duron am 12.12.2002, 23:12

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
Zitat von Duron
was tutsn da rum?
ich würds so machen:
---------------------------------
char text[40];
cin>>text;
cout<<text;
getch();
---------------------------------
fertig

warum?
darum:

eingabe: das ist ein test
ausgabe: das

Zitat von FMFlash
cin kann eher nix, weil man damit afair keine sätze einlesen kann

Duron

Here to stay
Avatar
Registered: Aug 2000
Location: /home
Posts: 3182
Zitat von Duron
edit: hab grad gemerkt dass es so nur eine zeichenkette einliest.
hab seite einem dreiviertel jahr nicht mehr c programmiert :(


hab ich leider erst später bemerkt, sorry :)

xdfk

pädagogisch wertvoll
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
Zitat
char *interface(char *input_line)
{
char temp_char =0;
int char_count =0;

if (!input_line)
exitOnFatalErrorOutOfMemory();

while ( ( (temp_char = getchar()) != '\n'))
{
input_line[char_count] = temp_char;
char_count++;
if (char_count>=MAX_STR_LEN) break;
}
input_line[char_count] = '\0';
return(input_line);
}
die relativ sichere methode dinge einzulesen....

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
OT : Ich möchte wissen wieviele der hier gesammelten Codestücke vom Threadstarter hergenommen werden :D

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
Zitat von FMFlash
ergänzung:
da er aber nicht nach einer möglichkeit sucht aus einem file zu lesen sondern aus dem stdin stream -> gets () statt fgets ()

nein, gets() ist kein ersatz, es erlaubt keine beschränkung der stringlänge! stattdessen fgets mit dem parameter stdin aufrufen (wird von stdio.h zusammen mit stderr und stdout eingebunden)

xdfk

pädagogisch wertvoll
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
Zitat von atrox
nein, gets() ist kein ersatz, es erlaubt keine beschränkung der stringlänge! stattdessen fgets mit dem parameter stdin aufrufen (wird von stdio.h zusammen mit stderr und stdout eingebunden)

deswegem getchar und einfach ab einer bestimmten länge eingaben ignorieren...... 99,99999%ig secure. (ich wüsst keine möglichkeit das zu umgehen, heißt aber nix bin newbie in C)

semteX

hasst die KI
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14864
Zitat von xdfk
die relativ sichere methode dinge einzulesen....
he der f#ngt grad mal an mim programmiern erschlag ihn ned glei ;)

Neo-=IuE=-

Here to stay
Registered: Jun 2002
Location: Berndorf, NÖ
Posts: 3236
Zitat von semteX
nennen wir die variable x

is jugendfreier

warum hab i dreck gecodet?!? i mach das imma so

du spannst feld auf mit 50 zeichn callled X

dann lest nen string ein (%s) und speicherst das auf X

mit printf gibst es wieder aus

wo is da der dreck?!?

klar speichert er es IRGENDWO

und? who cares?
is ja egal wo im ram das ding liegt

@Weird: Da liegst du richtig!

schau:
wenn du das machst:
char x[50]
dann ist x die adresse vom 1. element des arrays und wert in [] gibt an um wieviel mal sizeof(variablentyp) (lieft anzahl bytes zurück;)) adressen er weitergeht ;)
also is x[0] gleichbedeutend mit *x und x[1] mit *(x+1)
wenn du jetzt scanf adresse von x[] geben willst musst entweder:
&x[] machen, oda
x
:)

semteX

hasst die KI
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14864
jo eh!

beim scanf musst &x machn!
Er muss sich das zeug ja von der Adresse holen...

btw, i code scho seit 3 jahrn so, habs so gelernt

Neo-=IuE=-

Here to stay
Registered: Jun 2002
Location: Berndorf, NÖ
Posts: 3236
ja aber eben bei arrays is der name scho die erste adresse, also entweder bei arrays

scanf("",x) oda
scanf("",&x[])
:)

wobbo

...
Registered: Apr 2001
Location: Drehstuhl :)
Posts: 1022
Zitat von semteX
jo eh!

beim scanf musst &x machn!
Er muss sich das zeug ja von der Adresse holen...
jo eh... aber x alleine ist schon die adresse ;)

semteX

hasst die KI
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14864
Zitat von Neo-=IuE=-
ja aber eben bei arrays is der name scho die erste adresse, also entweder bei arrays

scanf("",x) oda
scanf("",&x[])
:)
:confused: i schnall ehrlichgsagt ned ganz was du meinst

i hab es imma glernt dass ma so einliest

und mit printf ausgiebt...

mfg
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz