scanf(); fehler :(
lima-city → Forum → Programmiersprachen → C/C++ und D
adresse
ahnung
aufruf
compiler
eingegebene name
element
fangen
formen
genausowenig
main
null
pausen
sofort
speicher
string
thw
versuchen
zeichenfolge
zeichenkette
zeiger
-
Moinsen!
Ich versuche c zu lernen (normales) und ich wollte mal machen, dass man seinen namen eingibt:
/* by andy2309 */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char lol;
printf("Willkommen zu nix!\n\nBitte geben Sie ein, wie Sie heissen!\n");
scanf("%s", &lol);
printf("\n\nHallo, %s\n\n", lol);
system("PAUSE");
}
aber nachdem man einen namen eingegebn hat und enter dr?ckt, schlie?t sich das programm sofort...
hat jemand ne ahnung, wie ich es richtig machen muss? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Schlie?t sich das Programm zuf?llig mit einem Speicherzugriffsfehler?
Ein Name ist i.A. eine Zeichenkette ("String"). Der Datentyp char (den du verwendest) repr?sentiert aber nur ein Zeichen (bzw. eigentlich eine Zahl, welche den ASCII-Wert des Zeichens widerspiegelt). Kannst also nur ein einziges Zeichen speichern.
Um eine Zeichenfolge darzustellen, kannst du im einfachsten Fall ein Array ("Vector") von char verwenden:
char[10+1] lol="";
Damit bekommst du ein char-Array, in welchem du 10 Zeichen speichern kannst (das letzte Zeichen ist f?r die terminierende Null - \0 - reserviert. Eine Zeichenfolge muss *immer* mit einer terminierenden Null enden). Die Initialisierung ist nciht unbedingt erforderlich, aber empfehlenswert, denn wenn scanf fehlschl?gt, kann es sonst zu undefinierten Zust?nden f?hren.
Auf einzelne Zeichen deines Vectors kannst du in der Form
lol[n]
zugreifen, also z.B.
lol[5]
f?r das sechste Zeichen (wir fangen bei 0 an mit z?hlen!).
scanf kannst du nun so z.B. aufrufen:
scanf("%s", lol);
Wenn du einfach nur lol schreibst, bekommst du die Speicheradresse des ersten Elementes (da es sich ja um einen Vector handelt). Das & l?sst du deshalb hier weg!
Die tats?chliche L?nge deines Strings kannst du dann mit
strlen(lol)
ermitteln.
MfG,
thw
Beitrag ge?ndert am 30.03.2006 18:27 von thw -
Das m?sste haargenau so funktionieren ;)
#include <conio.h>
#include <stdio.h>
void main(void)
{
clrscr();
char *str;
printf("Willkommen\nBitte geben Sie jetzt Ihren Namen ein: ");
scanf("%s",&str);
//%c f?r n char-Wert und %s bei nem String//
printf("\n\nDer eingegebene Name lautet: %s",&str);
getch();
}
Fertig :) -
1. void main gab es nie und wird es wohl nie geben.
2. clrscr() ist genausowenig wie conio standardkonform
3. du versuchst etwas zu speichern ohne speicher zu besitzen das duerfte nen absturz geben.
4. getch() ist auch nicht standardkonform und betriebssystemspezifisch
5. scanf() du uebergibst die adresse des zeigers -gewuenscht ist jedoch sicherlich das ziel. also entweder str oder &str[0] gleiches gilt fuer printf()
6. main sollte einen rueckgabewert haben -
das mit dem void schl?gt mir mein Compiler von vornerein aber vor O.o
da scheint es zu gehen^^ -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage