Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » *char mit *char in if vergleichen?

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 ]
000
04.09.2004, 14:23 Uhr
~CaesarCortezz
Gast


Ich habe folgendes Programm und es vergleicht nur die ersten beiden buchstaben wie kann ich diesen Fehler beheben
Das Prog:

C++:
#include <iostream.h>
#include <fstream.h>

void main() {
    
    char *vokd;
    char *voks;
    char *word1;
    word1=new char[155];
    vokd=new char[155];
    voks=new char[155];
    ifstream OutFile("vokabeln.txt");
    while (!OutFile.eof()) {
        OutFile >> voks;
        cout << voks << endl;
        cin >> word1;
        OutFile >> vokd;
        if (*word1==*vokd)
            cout << "Richtig" << endl;
        else {
            cout << "Falsch" << endl;
            cout << vokd << endl;
        }
    }
}




Danke im Voraus
Caesar
PS: Sry falls euch die Frage schon zum Hals raushängt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.09.2004, 14:34 Uhr
Pablo
Supertux
(Operator)


1. die Benutzung von


C++:
#include <iostream.h>
#include <fstream.h>
...
cout
endl



ist veraltet. Benutze stattdessen


C++:
#include <iostream>
#include <fstream>
...
std::cout
std::endl



2. void main ist ein Fehler! main ist nach C99 und ISO C++ int main und liefert 0 wenn alles glatt gelaufen ist, etwas ungleich 0 bei Fehlern. Hier mehr dazu.

Wenn du 2 char* vergleichen willst, dann ist


C++:
if (*word1==*vokd)



falsch, weil *word1 leifert nur das erste Zeichen, *vokd auch, also vergleichst du nur jeweils nur die ersten Zeichen. Wenn du die Strings vergleichen willst,k musst du strcmp nehmen. strcmp liefert 0 bei Gleichheit. Also


C++:
if (strcmp(word1,vokd)==0)
{
    /* word1 und vokd sind gleich */
}



3. Wenn du C++ nimmst und mit fstreams und so arbeitets, dann benutze

C++:
#include <string>
...
std::string s = "Hello world";



Das ist in C++ besser.

4. Du reservierst Speicher mit new char[155]. Dieser Speicher muss aber mit delete [] variablename freigegeben werden, sonst enstehen Speicherlecks.

Also am Ende des Code oder wenn du die Variablen nicht mehr brauchst


C++:
delete [] word1;
delete [] vokd;
delete [] voks;


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 04.09.2004 um 14:34 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.09.2004, 14:38 Uhr
CaesarCortezz
minderer Student


Wow schnelle Antwort Danke!

Also das mit dem void main liegt wahrscheinlich an meiner Version (C++ für Dummies Autorenversion)

Naja ich werde mich dann wohl mit dem neuen iostream anfreunden...


Zitat von Verfasser:

3. Wenn du C++ nimmst und mit fstreams und so arbeitets, dann benutze




Soll das heißen der Tip darüber ist nur unter C?

Danke nochmal für die schnelle Hilfe

Caesar
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.09.2004, 14:47 Uhr
Pablo
Supertux
(Operator)



Zitat von CaesarCortezz:


Soll das heißen der Tip darüber ist nur unter C?




Nein, nicht unbedingt. Du kannst unter C++ auch char* benutzen, das ist kein Problem. Aber C++ kennt die Klasse string. Und sie ist viel einfcah zu benutzen als char*, vor allem, weil man so Sachen machen kann wie


C++:
#include <iostream>
#include <string>

int main()
{
    std::string hallo = "Hallo ";
    std::string welt = "Welt";
    std::string s = hallo + welt;


    std::cout << s << std::endl;
    return 0;
}



Mit char* ist das nicht möglich. Außerdem muss man mit char[] die Länge wissen und man kann nicht immer alles aufnehmen. Bei C++ strings kümmerst du dich nicht üm die Länge des Strings oder ob es genügend Platz hast ==> mit C++ strings ist es sicherer zu arbeiten.

Mir persönlich gefällt char* besser, weil ich lieber C Programmiere aber std::string ist besser.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.09.2004, 15:03 Uhr
CaesarCortezz
minderer Student


Danke.
Ich persönlich will zum Windows-Programmieren aber ich lerne bisher nur aus Büchern und das hilft auf die Dauer eben nicht wirklich
Mal sehn ich werd jetzt wohl erstmal lange Zeit mit Tuts beschäftigt sein
Wenn ich Probleme habe wende ich mich vertrauensvoll an euch *beschließ*

Also cu

Caesar
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.09.2004, 15:14 Uhr
Pablo
Supertux
(Operator)


Wenn du ein Neuling bist, dann rate ich dir, zuerst mit den Standards zu arbeiten, die STL besser kennenlernen und so. Wenn du dich sicher fühlst, dass du mit den Standards gut umgehen kannst, dann kannst du den Umstieg in eine andere systemspeziefische Bibliothek wie WinAPI oder MFC.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.09.2004, 19:45 Uhr
CaesarCortezz
minderer Student


nun ja ich progge ja schon ne weile aber mehr andere sachen (kennst du DarkSigns?)
und nun mach ich seit ner weile mehr oder weniger uneffektiv c++ und weiß nich wo ich die ganzen neuen sachen herbekomm (hab ebn nur das ururururururalte c++ buch)..
weiß ja nich mal was STL is aber ich werd mich ma durch eure tuts und andere durchforsten...
cya Caesar
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.09.2004, 20:48 Uhr
Pablo
Supertux
(Operator)


Hier mehr info über die STL (Standard Template Library)

www.sgi.com/tech/stl/
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.09.2004, 14:16 Uhr
CaesarCortezz
minderer Student


So jetzt verstehe ich aber folgendes nicht:


C++:

#include <iostream>
#include <string>

int main() {

    std::string s = "Hallo ";
    std::string t = "Welt";
    std::string u;
    std::string p = "god";

    std::cout << s+t << "\n";
    std::cout << "Geben Sie eine Zeichenkette ein\n";
    std::cin >> u;
    std::cout << "Sie haben '" << u << "' eingegeben\n";
    
    if (strcmp(p,u)==0)
        std::cout << "Hehe\n";
    else
        std::cout << "grmmpfl\n";


    return 0;

}




und er will die nicht vergleichen... *ratlossei*


Bearbeitung von Pablo:

von [code] -> [cpp] geändert.


--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''

Dieser Post wurde am 05.09.2004 um 14:32 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.09.2004, 14:31 Uhr
(un)wissender
Niveauwart


Das hat die Pablo schon gesagt.
Mit strcmp vergleichst du char*, nicht std::string.
Dort kannst du schreiben std::string == std::string, da dieser Operator überladen ist.
--
Wer früher stirbt ist länger tot.
 
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: