Schrift
[thread]1113[/thread]

Einlesen eines Strings



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
renee
 2004-06-14 15:55
#11053 #11053
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich habe folgenden Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
#include <string>

int main(){
string test, test2;
cin >> test;
cout<<test<<endl;
cout<<test2;
return 0;
};


So steht in test aber nur das bis zum 1. Leerzeichen. Wie muss ich es machen, wenn ich alles bis zum Zeilenende in test stehen haben will??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
esskar
 2004-06-14 16:04
#11054 #11054
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
schau dir getline an
renee
 2004-06-14 16:10
#11055 #11055
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn ich
Code: (dl )
getline(cin,test);

mache, dann kann ich für test überhaupt keine Eingabe machen...

und
Code: (dl )
cin.getline(test,200)
bringt folgenden Fehler:
Quote
~/Tests/cpp 49> g++ Address.cpp
Address.cpp: In member function `bool Address::scan()':
Address.cpp:29: no matching function for call to `std::basic_istream<char,
  std::char_traits<char> >::getline(std::string&, int)'
/usr/local/include/g++-v3/bits/istream.tcc:658: candidates are:
  std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
  _Traits>::getline(_CharT*, int, _CharT) [with _CharT = char, _Traits =
  std::char_traits<char>]
/usr/local/include/g++-v3/istream:176:
  std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
  _Traits>::getline(_CharT*, int) [with _CharT = char, _Traits =
  std::char_traits<char>]
\n\n

<!--EDIT|renee|1087215058-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
esskar
 2004-06-14 21:20
#11056 #11056
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
char test[512+1] = {0};

cin.getline(test, sizeof(text)-1);
[E|B]
 2004-06-14 23:35
#11057 #11057
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Als C Anfänger darf ich doch hoffentlich mal eine Frage bzgl. deinem Code, renee, posten.
Das ist doch kein C Code sondern C++? Gibt es in C den Datentyp "string"? Ich glaube nur "char", oder seh ich da was falsch?
Und darf ich, beim Includen, auch die Header-Endung weglassen? Oder nur bei C++? Wie sieht das aus?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
esskar
 2004-06-15 00:03
#11058 #11058
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
@eb:

zum include: nein, du kannst es nicht weglassen; "string" ist Teil der STL (Standard Template Library); ist einen Datentypen und Algorithmen Library für C++ und ist bei jedem guten Compiler dabei; und deren include-files haben tatsächlich keine .h Endung; es gibt also wirklich die datei "string" im Include Verzeichnis

zum Datentyp "string": nein, den gibt es in C nicht; renee hat also C++ code gepostet. der Datentyp string ist eine Klasse der STL (Strings in SGI STL

zu "char": char ist auch kein string; es representiert ASCII-Zeichen - hat also Platz für 8-bit - ASCII Werte zwischen 0 und 127 entsprechen den Dezimal Werten 0 und 127... die ASCII Zeichen zwischen 128 und 255 entsprechen den Werten -1 und -127...
die negative Werte resultieren daraus, dass char ein "signed" - also vorzeichenhaftiger - Datentyp ist... wenn du "unsigned char" benutzt, hast du die Möglichkeit die ASCII Wert zwischen 0 und 255 einfach dirch die Zahlen 0 und 255 darzustellen...
Code: (dl )
1
2
3
4
5
char ae = 'ä';
if(ae == -5) printf("(ae == -5) okay\n");
if(((unsigned char)ae) == 132) printf("(((unsigned char)ae) == 132) okay\n");
if(ae < 0) printf("(ae < 0) okay\n");
if(ae & 128) printf("(ae & 128) okay\n");


Have fun! :)
Crian
 2004-06-15 03:01
#11059 #11059
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
[E|B
,14.06.2004, 21:35]Und darf ich, beim Includen, auch die Header-Endung weglassen? Oder nur bei C++? Wie sieht das aus?


bei C gibt man die Endung an:

Code: (dl )
#include "stdio.h"


bei C++ lässt man sie weg und setzt das ganze in spitze Klammern:

Code: (dl )
#include <cstdio>


(Für die "alten" C-Style-Bibliotheken setzt man dann noch ein "c" vor den Namen, wie im Beispiel. Allerdings sollte man da lieber die C++-Ausdrucksmittel nutzen.)

Das ist noch nicht die ganze Wahrheit, aber fast ;-)\n\n

<!--EDIT|Crian|1087254272-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2004-06-15 03:08
#11060 #11060
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich benutz unter c++ trotzdem

Code: (dl )
#include <stdio.h>


und unter C kann ich das genauso übernehmen...

Spitzeklammern heißt doch nur, dass sich die Datei im globalen Headerpath befindet, wobei Anführungszeichen Dateien im aktuellen Verzeichnis angeben
Crian
 2004-06-15 03:56
#11061 #11061
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Es gab da irgendwelche wichtigen Unterschiede, die daraus resultierten, wie man die Standard-Header einbindet. Ich glaube bezüglich Namensraum. Ich weiß es aber nicht mehr genau.

Spitze Klammern gab es an dieser Stelle unter C (Standard von 89) nicht. Kann aber sein, dass das viele C/C++-Compiler unterstützen.\n\n

<!--EDIT|Crian|1087257486-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
renee
 2004-06-15 08:55
#11062 #11062
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=esskar,14.06.2004, 19:20]
Code: (dl )
1
2
3
char test[512+1] = {0};

cin.getline(test, sizeof(text)-1);
[/quote]
Also kann ich es nicht mit strings machen??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2004-06-14 15:55.