Zum Forum springen
Benachrichtigungen
Alles löschen

[Geschlossen] C++ Aufgabe Email Adresse

31 Beiträge
13 Benutzer
0 Reactions
1,501 Ansichten
makro1983
Beigetreten: 17.05.2008

Bei 2@ soll die emailadresse ungültig sein.
sagt mir in zeile 20 nicht geklariertes i
aber das mach ich doch mit der for-schleife?

#include <iostream>
#include <string>

using namespace std;

int main ()
{
string s;

cout << "E-Mail Adresse eingeben: ";
cin >> s;

int laenge=0;
laenge=s.length();

int anz=0;

for (int i=0; i<laenge; i++)
{
if(s == '@')
{
anz++;
}
}

if (anz > 1)
{
cout << endl;
cout << "Dies ist keine gültige EmailAdresse!"<< endl<<endl;
}

else
{
cout << endl;
cout << "Gültige EmailAdresse!";
}

return 0;
}


30 Antworten

deklariere sie doch einfach vorher

int i;
for (i=0; i<laenge; i++)


DoktorRob
Beigetreten: 17.07.2008

Bei mir hat der Quelltext so wie er da steht funktionert.


makro1983 Themenstarter
makro1983
Beigetreten: 17.05.2008

Fehler 1 error C2065: 'i': nichtdeklarierter Bezeichner c:\users\\documents\visual studio 2008\projects\vcbnvnc\vcbnvnc\fdgdfgdggdgdgg.cpp 20 vcbncvnc


könntest auch mal versuchen, s als array zu deklarieren. ich meine, du rufst es mit s ja auch wie ein array ab. ich finde es ein wenig untypisch für programmiersprachen, dass normale strings automatisch in arrays umgewandelt werden, das müsste doch auf den arbeitsspeicher gehen... also versuche mal mit string s[20]; zu deklarieren. obwohl, ist quatsch. ich programmiere auch eine andere sprache, kann nur spekulieren. aber ich denke mit der richtung liege ich schon richtig


makro1983 Themenstarter
makro1983
Beigetreten: 17.05.2008

Habs mal mit int i=0;
zu beginn gemacht

Aber da klappts mit 2 @ auch nicht. Ist noch ein Logisches Problem mit der for Schleife!? Von daher kann es bei dir eigentlich auch nicht laufen@ Doc?


makro1983 Themenstarter
makro1983
Beigetreten: 17.05.2008

Original von Thilo87
könntest auch mal versuchen, s als array zu deklarieren. ich meine, du rufst es mit s ja auch wie ein array ab. ich finde es ein wenig untypisch für programmiersprachen, dass normale strings automatisch in arrays umgewandelt werden, das müsste doch auf den arbeitsspeicher gehen... also versuche mal mit string s[20]; zu deklarieren

Sollte die Email Adresse als String einlesen


vielleicht

for (int i=0; i<laenge-1; i++)


QueenBeaver
Beigetreten: 09.05.2010

Du initialisierst anz auf 0, inkrementierst bei gefundenem '@' einmal, prüfst dann aber anz > 1 ab.


makro1983 Themenstarter
makro1983
Beigetreten: 17.05.2008

Original von QueenBeaver
Du initialisierst anz auf 0, inkrementierst bei gefundenem '@' einmal, prüfst dann aber anz > 1 ab.

joa bei 2*@ soll der ja abbrechen und sagen, dass es keine gültige emailadresse ist


DoktorRob
Beigetreten: 17.07.2008

Also mit diesen ganzen C++ Sachen kenn ich mich nicht wirklich gut aus, aber meins wissen ist die for schleife syntaktisch korrekt.
Und dass man auf die Strings wie auf arrays zugreifen kann, wusste ich vorher zwar noch nicht, ist aber andererseits nicht sonderlich überraschend.

Ich habe nicht Visual Studio oder wie das heißt, sondern Dev-C++ verwendet. Aber ich kann mir nicht vorstellen dass das die Ursache ist.

Ich habe also keinen Lösungsvorschlag.


makro1983 Themenstarter
makro1983
Beigetreten: 17.05.2008

Ich machs mit Visual Studio... klappt nicht.

int i; brauch ich auch nicht vorher zu initialisieren. gilt ja auch nur fuer die for-schleife und nicht "global". deswegen.


TylorNN
Beigetreten: 17.07.2010

Ich hab es gerade mal mit Visual Studio 2008 getestet, klappt super, also der Code ist richtig. Vielleicht spinnt Visual Studio bei dir rum, setz doch mal ein neues Projekt auf.


sirjinx29
Beigetreten: 14.11.2005

weil die aufgabe so banal ist und er sie auch so schon gelöst hat


#include <iostream>
#include <string>

using namespace std;

int main ()
{
 string s;

 cout << "E-Mail Adresse eingeben: ";
 cin >> s;

 int laenge = s.length();

int anz=0;

for (int i=0; i<laenge; i++)
{
 if(s[i] == '@')
         anz++;
}


if (anz != 1)
{
 cout << endl;
 cout << "Dies ist keine gültige EmailAdresse!"<< endl<<endl;
}

else
{
 cout << endl;
 cout << "Gültige EmailAdresse!";
}

return 0;
} 

Habe mal ein paar unnötige Klammern und so entfernt und das ganze in der Entwicklsungsumgebung "Dev C++" ausprobiert. Programm läuft bei mir. Außerdem habe ich in deiner IF-Bedingung abgefragt, ob anz != 1 ist, denn eine nicht-gültige E-Mail Adresse könnte ja auch null @ haben...

Dass in C++ ein String wie ein Array ansprechbar ist, ist völlig normal. Das ist im Prinzip in allen Programmiersprachen so, denn ein String ist nichts anderes als ein Array von Chars!!!

Wenn du übrigens ganz "schön" auf eine gültige E-Mail Adresse prüfen willst könntest du auch "Reguläre Ausdrücke" verwenden. Aber ich glaube für diese Hausaufgabe ist das ein bisschen oversized...

Viele Grüße
ono4u


Caius
Beigetreten: 02.03.2005

Ist es eine Uni-Aufgabe um Euer Verständnis für Schleifen zu prüfen oder ein eigenes Projekt? Im eigenen Projekt würde ich RegExp vorziehen, von einem Studenten einen Abbruch in der Schleife verlangen (z.B. while)

Viele Grüße


FiftyBlume
Beigetreten: 06.06.2010

Original von DoktorRob
Also mit diesen ganzen C++ Sachen kenn ich mich nicht wirklich gut aus, aber meins wissen ist die for schleife syntaktisch korrekt.
Und dass man auf die Strings wie auf arrays zugreifen kann, wusste ich vorher zwar noch nicht, ist aber andererseits nicht sonderlich überraschend.

Ich habe nicht Visual Studio oder wie das heißt, sondern Dev-C++ verwendet. Aber ich kann mir nicht vorstellen dass das die Ursache ist.

Ich habe also keinen Lösungsvorschlag.

Das könnte durchaus sein, vllt verschluckt sich der Studio-Compiler an dem @ und der Dev-C++ nicht:)

@ono4u:
Das ist nicht überall so, die Ansteuerung über arrays ermöglicht n paar komische Sachen(meine Meinung).


Na dann probiere es doch mal aus :) Das ermöglicht keine komischen Sachen, das ist einfach so! Bevor du hier Sachen behauptest beschäftige dich erst mal mit der Materie, wie ein String gespeichert wird usw....


makro1983 Themenstarter
makro1983
Beigetreten: 17.05.2008

Original von Caius
Ist es eine Uni-Aufgabe um Euer Verständnis für Schleifen zu prüfen oder ein eigenes Projekt? Im eigenen Projekt würde ich RegExp vorziehen, von einem Studenten einen Abbruch in der Schleife verlangen (z.B. while)

Viele Grüße

ist von der uni


Teilen: