E-Mailabfrage
-
Dann schau dir mal die Klammerung in den Zeilen an.
[code]
if( strchr ( erlaubt, *p3 !=0 ) )
+------ ------+
| |
erster Parameter für zweiter Parameter für strchr
strchr
[\code]Und was soll p3 überhaupt?
Und warum ist vname ein char? Du speicherst da die Differenz zweier Zeiger.
Da ist ein Integertyp (was anderes ist char nicht) schon in Ordnung.
Aber warum einen, mit einem kleinen Wertebereich, von dem du nicht mal genau weißt, ob er Vorzeichenbehaftet ist.SAchau nochmal, wie ich die gültigen Zeichen überprüft habe (war 15:21:32 16.04.2015 erster Codeabschnitt)
-
Hallo Dirk, danke für die antwort.
Hab mir den Code jetzt nochmal angeschaut... manchmal sieht man den Wald vor lauter bäumen nicht.
Hab ihn nochnal überarbeitet..
Ich hab noch eine Frage bzgl deines Codes von damals:
size_t len_name; d = strchr(email ,'@'); //prüft auf @ zeichen if (d != NULL) { len_name = email-d; // Laenge vom Namen aus den Pointern. if (len_name > 0) { // sind da überhaupt Zeichen? if (strspn(strtext,erlaubt) == len_name) { // alles gueltige Zeichen? ....
die strtext variable bei dir, ist das in meinem Falle die email variable? könntest du mir die zeile mit der strspn funktion erklären? Die versteh ich nicht ganz.
Wäre dir sehr dankbar.
Schönen Sonntag gewünscht.
-
Oh, sorry, das strtext ist beim Copy&Paste stehen geblieben.
Ersetze strtext durch email.
Zu strspn: http://www.cplusplus.com/reference/cstring/strspn/
Es wird die Anzahl der gültigen Zeichen für den Namen in email ermittelt.
Da @ nicht mehr zum Namen gehört, muss die Anzahl der gültigen Zeichen der Anzahl der Zeichen vor dem @ entsprechen.
-
Hey Dirk,
das dachte ich mir schon. Nur leider funktioniert das natürlich auch nicht.. ätzend, ich setz mal den code rein, vllt kannst du mir kurz sagen was falsch ist.. er scheint genau dieses if zu überspringen...
............... vname =email-p1; // länge vorm @ if(vname == 0) // keine chars da? { printf("Ungültige E-Mailadresse3!\n"); return 0; // Ende! } if(strspn(email, erlaubt) == vname) { p2= strrchr(email, '.'); // Zeiger auf letzten Punkt setzen if (strcmp(p2, ".de") ==0 || strcmp(p2, ".com") ==0 || strcmp(p2,".org") ==0 || strcmp(p2, ".net") ==0) //überprüfen ob Endungen richtig { printf("Gültige E-Mailadresse!\n"); // ja? } else { printf("Ungültige E-Mailadresse4!\n"); // nein? } } else { printf("Ungültige E-Mailadresse5!\n"); } ..........
er printet mir immer Ungültige E-Mailadresse5 aus...
vllt kannst du helfen. Danke dir schonmal
Grüße
-
Schau dir mal den Rückgabewert von strspn an (in einer extra Variable)
Kannst du zusammen mit vname mit printf ausgeben.
Möglicherweise ist ein +-1 Fehler drin.
-
Hey dirk,
ich habe den code so umgeschrieben:
/* 7. Realisieren Sie ein C-Programm, das eine E-Mail-Addresse abfragt. Es soll überprüfen, ob es sich tatsächlich um eine E-Mail-Addresse handelt. Es soll ein "@" Zeichen vorkommen, danach der Domain-Name. Beispiele für gültige Domains: => domain.com || domain.de || domain.org */ #include<stdio.h> #include<string.h> int main(void) { char email[100]; size_t vname; int len; char *p1; char *p2; const char *erlaubt ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; printf("Bitte geben Sie eine E-Mailadresse ein: \n"); scanf("%s", &email[0]); p1 =strchr(email, '@'); //ein @ vorhanden? if(p1 ==NULL) // nein? { printf("Ungültige E-Mailadresse1!\n"); return 0; // Ende! } if(strspn(p1,"@") !=1) // Auf @ prüfen. Mehr als 1 @? { printf("Ungültige E-Mailadresse2!\n"); return 0; // Ende! } vname =email-p1; // länge vorm @ if(vname == 0) // keine chars da? { printf("Ungültige E-Mailadresse3!\n"); return 0; // Ende! } len= strspn(email, erlaubt); printf("%d\n" , len); }
wenn ich in der len zeile, das so schreibe erkennt er mir alle zeichen die ich vorher eingeben. wenn ich dahinter noch ==vname schreibe, erkennt er mir 0...
also wenn ich zb hallo@web.de eingebe erkennt er mir 5 zeichen also "hallo" denk ich mal..
verwirrt mich immer mehr so
Hast du nen tipp?
-
Du musst p1-email rechnen.
Sonst ist das Ergebnis negativ.
-
Soooooo, ich hoffe ich habs jetzt.
Vielen Dank erstmal das alle geholfen haben, die helfen wollten.
Ich weiß, es war nicht immer leicht, jedoch habe ich vieles gelernt durch euch!
Hier ist der Programmcode. Ich wäre euch dankbar falls euch etwas auffällt was nicht richtig ist. Ich habe nun eigentlich so gut wie alles durchprobiert was mir so einfiel.
/* 7. Realisieren Sie ein C-Programm, das eine E-Mail-Addresse abfragt. Es soll überprüfen, ob es sich tatsächlich um eine E-Mail-Addresse handelt. Es soll ein "@" Zeichen vorkommen, danach der Domain-Name. Beispiele für gültige Domains: => domain.com || domain.de || domain.org */ #include<stdio.h> #include<string.h> int main(void) { char email[100]; size_t vname; char *p1; char *p2; const char *erlaubt ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890."; printf("Bitte geben Sie eine E-Mailadresse ein: \n"); scanf("%s", &email[0]); p1 =strrchr(email, '@'); //ein @ vorhanden? if(p1 ==NULL) // nein? { printf("Ungültige E-Mailadresse!\n"); return 0; // Ende! } if(strspn(p1,"@") !=1) // Auf @ prüfen. Mehr als 1 @? { printf("Ungültige E-Mailadresse!\n"); return 0; // Ende! } if (strspn(p1-1,".") ==1) //. vor dem @? { printf("Ungültige E-Mailadresse!\n"); return 0; } vname =p1-email; // länge vorm @ if(vname == 0) // keine chars da? { printf("Ungültige E-Mailadresse!\n"); return 0; // Ende! } if(strspn(email ,erlaubt) ==vname) // alle chars erlaubt? { p2= strrchr(email, '.'); // Zeiger auf letzten Punkt setzen if (strcmp(p2, ".de") ==0 || strcmp(p2, ".com") ==0 || strcmp(p2,".org") ==0 || strcmp(p2, ".net") ==0) //überprüfen ob Endungen richtig { printf("Gültige E-Mailadresse!\n"); // ja? return 0; } else { printf("Ungültige E-Mailadresse!\n"); // nein? return 0; } } else { printf("Ungültige E-Mailadresse!\n"); return 0; } return 0; }
Wenn Fehler vorhanden bitte ich gern um berichtigung, gern auch falls es dir übersichtlichkeit oder irgendwas betrifft
-
Zwischen dem @ und dem Punkt in:
xxxx@yyyyyyy.de
also da, wo oben yyyyyy steht, kann man völlig beliebige Zeichen eingeben, ist das gewollt?
-
Halloo Belli,
ja das ist gewollt, da ich mich zu sehr auf dieses domain bla bla versteift habe.
Ich wollte jetzt nur noch prüfen ob die endungen nach dem "." auch die vorgegebenen sind.
Falls das dem Prof nicht reicht, sollte es ja nicht so schwer sein eine weitere if anweisung einzufügen.