Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » string verarbeitung!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
31.12.2003, 11:51 Uhr
kronos
Quotenfisch
(Operator)


eiteitei, das sind ja lustige casts

C++:
char wert;

wert ist nun char, d.h. es hat platz für nur einen buchstaben, in der regel ein byte

C++:
cin>>wert;

bin jetzt am zweifeln ob cin so schlau ist, die eingabe in char zu konvertieren, falls ja, bekommst du nur den ersten buchstaben der eingabe. falls nein... das willst du nicht wissen. also, dann gibt's ein disaster, weil versucht wird, die speicheraddresse einer zeichen-kette (i.d.r. von der größe eines integers/4byte) in ein char zu quetschen. das kann nicht gut gehen.


C++:
char str[] = "wert";

nichts für ungut, aber hier musste ich ein bischen lachen
alles was du hier tust, ist den string "wert" in str zu schreiben. also
str[0]='w'
str[1]='e'
str[2]='r'
usw.

das was du machen willst ist am einfachsten so erledigt:

C++:
char c;
int zahl;
scanf("%c%d", &c, &zahl);

if(c=='A')
{
    ausgabe();
}


scanf liest anstatt einen string (wie sscanf) die user-eingabe, ansonsten sind die funktionen gleich.

leider kann ich dir den c++ code nicht zuverlässig korrigieren, hab' bloß bei C was zu melden...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 31.12.2003 um 11:58 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
31.12.2003, 12:14 Uhr
~point
Gast


danke für die Hilfe aber das ist eben nicht ganz das was ich brauche!

Am Microcontroller kann ich ja nicht einfach einen Text eingeben! da muss ich aus dem rs232Buffer auslesen also wäre es schon gut das A300 zu erst in ner variablen abgespeichert wird so wie str[] ....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
31.12.2003, 13:24 Uhr
kronos
Quotenfisch
(Operator)


hm?
also cin liest auch nur dir user-eingabe, und das geht auch mit scanf...
von COM-port-materie oder was man da auch immer braucht hab' ich wenig plan, meinst du sowas:

C++:
char buffer[255];
char c;
int frequenz;
read(DeviceHandle, buffer, bytes2read); // ka, wie du das machst
sscanf(buffer,"%c%d", &c, &frequenz);
if(c=='A')
{
    ausgabe();
}

die buffer-größe ist halt nicht dynamisch, aber das halte ich hier auch nicht für sinnvoll...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 31.12.2003 um 13:26 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
31.12.2003, 13:29 Uhr
~point
Gast


wie ich das auslese ist im prinzip irrelevant, ich möchte nur wissen wie ich in deinem codebeispiel zB buffer deklarieren muss, mit int oder char oder???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
31.12.2003, 14:38 Uhr
kronos
Quotenfisch
(Operator)


prinzipiell als char. allerdings ist die frage ob deine controller den frequenz-wert als ASCII-zeichenkette empfangen/übergeben will. wenn du mit sscanf einen string seziert, geht die funktion davon aus alles in ASCII-form vorliegt. also A123 wäre:

buffer[0] == 'A' == 65
buffer[1] == '1' == 49
buffer[2] == '2' == 50
buffer[3] == '3' == 51

falls die frequenz aber in int-form übermittelt wird, wäre A123:

buffer[0] == 'A' == 49
buffer[1] == 123
buffer[2] == 0
buffer[3] == 0
buffer[4] == 0

bei frequenzen größer als 255 verteilt sich die zahl dann über bis zu vier bytes (char=1byte).
also, was sagt der controller dazu?
falls er sich für die zweite variante entscheidet, wäre es vielleicht sinnvoll beim auslesen das erste byte in einen char zu stecken und die restlichen in einen int. ansonsten alles in char und sscanf verwenden.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 31.12.2003 um 14:40 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
31.12.2003, 15:09 Uhr
0xdeadbeef
Gott
(Operator)


Ich finde es immer sinnvoll, die Eingabe zeilenweise zu verarbeiten - sonst kriegst du nachher Ärger mit Kram, der noch im Input-Buffer steht. Also:

C++:
char buffer[256];
char c;
int freq;

fgets(buffer, 256, stdin); /* Lies eine Zeile, aber höchstens 255 Zeichen aus stdin in buffer ein.
                            * Man macht das, um Buffer Overflows zu vermeiden */


/* Hier wie gehabt buffer mit sscanf weiter verarbeiten: */
if(sscanf(buffer, "%c%d", &c, &freq) == 2) {
  /* ... */
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: