In C 2 eingegebene IP Adressen vergleichen



  • dann zeigt mal dein Eingabe-Source-Code und dann kann man weiter Tips geben



  • Bitte nicht lachen.:)

    #include <iostream>
    #include <stdio.h>
    #include <conio.h>

    /* run this program using the console pauser or add your own getch, system("pause") or input loop */

    int main() {
    int ip1;
    int ip2;
    int submask1;
    int submask2;

    printf("Bitte geben sie die erste IP-Adresse ein.\n");
    scanf("%d",&ip1);

    int[] tokens = ip1.Split('.');
    int value1 = Int32.Parse(tokens[0]);
    int value2 = Int32.Parse(tokens[1]);
    int value3 = Int32.Parse(tokens[2]);
    int value4 = Int32.Parse(tokens[3]);

    printf("Bitte geben sie die dazugehörige Subnetzmaske ein.\n");
    scanf("%d",&submask1);

    int[] tokens = submask1.Split('.');
    int value5 = Int32.Parse(tokens[0]);
    int value6 = Int32.Parse(tokens[1]);
    int value7 = Int32.Parse(tokens[2]);
    int value8 = Int32.Parse(tokens[3]);

    printf("Bitte geben sie die zweite IP-Adresse ein.\n");
    scanf("%d",&ip2);

    int[] tokens = ip2.Split('.');
    int value9 = Int32.Parse(tokens[0]);
    int value10 = Int32.Parse(tokens[1]);
    int value11 = Int32.Parse(tokens[2]);
    int value12 = Int32.Parse(tokens[3]);

    printf("Bitte geben sie die dazugehörige Subnetzmaske ein.\n");
    scanf("%d",&submask2);

    int[] tokens = submask2.Split('.');
    int value13 = Int32.Parse(tokens[0]);
    int value14 = Int32.Parse(tokens[1]);
    int value15 = Int32.Parse(tokens[2]);
    int value16 = Int32.Parse(tokens[3]);

    if (value1 == value9 && value2 == value10 && value3 == value11 && value4 == value12 && value5 == value13 && value6 == value14 && value7 == value15 && value8 == value16)
    {
    printf("Die IP Adressen sind im gleichen Netz und haben die gleiche IP Adresse\n");
    }
    else {

    printf("Die IP Adressen sind nicht im gleichen Netz\n");
    }
    }


  • Mod

    1. Nutze scanf! Ein Formatstring wie "%3d.%3d.%3d.%%3d" sollte deinen Code massiv vereinfachen. Denk da dran, den Rückgabewert zu prüfen!
    2. Nutze unbedingt irgendeine Art von zusammenfassender Datenstruktur, nicht valueXX! Ein struct oder zur Not ein Array bewirken ein weiteres Wunder zum Zusammenfassen deines Codes.
    3. Subnetmasken funktionieren anders. Nochmal nachlesen!



  • kunter schrieb:

    int main() {
    int ip1;
    int ip2;
    int submask1;
    int submask2;

    printf("Bitte geben sie die erste IP-Adresse ein.\n");
    scanf("%d",&ip1);

    int[] tokens = ip1.Split('.');
    int value1 = Int32.Parse(tokens[0]);
    int value2 = Int32.Parse(tokens[1]);
    int value3 = Int32.Parse(tokens[2]);
    int value4 = Int32.Parse(tokens[3]);
    ...

    Das kann so nicht funktionieren, weil du deine Eingabe in einem int speicherst und das mit mehreren . nicht umgehen kann.
    Du musst es also als Zeichenkette einlesen.

    Das hätte auch den Vorteil, dass du die Eingabe überprüfen kannst bzw. musst.

    Ach und benutze bitte die Formatierung des Forums für C Code.



  • Korrektur:

    Eigentlich kann es mit keinem . umgehen, das ist schließlich kein double.



  • kunter schrieb:

    Ich möchte ein Programm in C schreiben

    kunter schrieb:

    ...
    #include <iostream>...

    Du weißt nicht, was du tust.



  • Nicht nur C++, sondern auch noch C++/CLI (.NET) - das sind ja gleich 3 Sprachen auf einmal 😉



  • Mir wäre nicht bekannt dass int ( Sytem::Int32 ) in C++/CLI ne Memberfunktion Split hätte.
    Und Int32.Parse geht in C++/CLI auch nicht, das müsste Int32::Parse heissen. Und würde als Argument natürlich keinen int sondern nen System::String nehmen.

    Ich hab's jetzt nicht ausprobiert, aber es würde mich sehr wundern wenn es überhaupt irgendwas gäbe mit dem man den gezeigten Code fehlerfrei compilieren kann.

    @kunter

    1. Entscheide dich welche Sprache du verwenden willst (bzw. erkundige dich welche Sprache(n) du verwenden darfst/musst)
    2. Lerne die Grundlagen der Sprache für die du dich entschieden hast

    Falls dir die Wahl frei steht, und sonst nichts dagegen spricht, würde ich dir zu C# raten. Weil es am einfachsten von den dreien (C, C++, C#) zu erlernen ist. (Zumindest wenn man mit "erlernen" meint es so weit zu lernen dass man halbwegs gut einfache Programme damit schreiben kann.)



  • Auf ein neues. Vielleicht ist dieser Versuch besser, leider gibt er mir falsche Daten aus. Ich schätze in meiner Abfrage ist etwas falsch. Wisst ihr wo mein Fehler liegt? Gruß

    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main() {
    	int IP11, IP12, IP13, IP14, IP21, IP22, IP23, IP24, mask1, mask2, mask3, mask4, erg1, erg2, erg3, erg4, erg5, erg6, erg7, erg8;
    		fflush(stdin);
    
    		printf("Hier, bitte die erste IP-Adresse eingeben\n"); //Eingabe der 1. IP-Adresse
    		scanf("%u.%u.%u.%u", &IP11,&IP12,&IP13,&IP14);
    		fflush(stdin);
    		printf("Hier, bitte die zweite IP-Adresse eingeben\n"); //Eingabe der 2. IP-Adresse
    		scanf("%u.%u.%u.%u", &IP21,&IP22,&IP23,&IP24);
    		fflush(stdin);
    		printf("Hier, bitte die zugehörige Subnetzmaske eingeben\n"); //Eingabe der Subnetzmaske
    		scanf("%u.%u.%u.%u", &mask1,&mask2,&mask3,&mask4);
    
    	erg1 = IP11&mask1;
    	erg2 = IP12&mask2;
    	erg3 = IP13&mask3;
    	erg4 = IP14&mask4;
    	erg5 = IP21&mask1;
    	erg6 = IP22&mask2;
    	erg7 = IP23&mask3;
    	erg8 = IP24&mask4;
    
    	if(erg1 == erg5 && erg2 == erg6 && erg3 == erg7 && erg4 == erg8)   {
      printf("Sie sind im gleichen Subnetz\n");
    }else
    {
    	printf("Sie sind NICHT im gleichen Subnetz\n");
    	}
    }
    


  • kunter schrieb:

    leider gibt er mir falsche Daten aus.

    Bei welcher Eingabe erhältst du denn "falsche Daten"?


  • Mod

    MFK schrieb:

    kunter schrieb:

    leider gibt er mir falsche Daten aus.

    Bei welcher Eingabe erhältst du denn "falsche Daten"?

    Wahrscheinlich bei allen, da nahezu jede einzelne Zeile undefiniertes Verhalten auslöst; und der Algorithmus selbst auch Schrott ist. Geradezu ein Kunstwerk, das hin zu bekommen. Zusammen mit der exzentrischen Texteinrückung bin ich geneigt, von Absicht auszugehen.



  • Bestes Forum. Schade das man keine vernünftige Hilfe bekommt und nur auf den Fehlern herumgeritten wird. Kann nicht jeder ein Genie sein wie SeppJ 🙂 Wünsche dir trotzdem Spaß am Leben.



  • MFK schrieb:

    kunter schrieb:

    leider gibt er mir falsche Daten aus.

    Bei welcher Eingabe erhältst du denn "falsche Daten"?

    Wenn ich die erste und die zweite IP Adresse sowie die Subnetzmaske eingebe, soll das Programm eigentlich mir sagen ob diese IP Adressen im gleichen Subnetz liegen oder nicht. Das Programm sagt mir aber, dass egal welche IP Adresse ich eingebe (im Subnetz oder nicht) die immer im gleichen Subnetz sind. x)


  • Mod

    Du hast auf der ersten Seite jede Menge vernünftige Hilfe bekommen. Du hast nichts davon angenommen. Dann verfliegt Hilfsbereitschaft sehr schnell. Wir erkennen halt, wenn jemand bloß seine Hausaufgaben gemacht bekommen möchte, anstatt selber zu lernen.



  • SeppJ schrieb:

    Du hast auf der ersten Seite jede Menge vernünftige Hilfe bekommen. Du hast nichts davon angenommen. Dann verfliegt Hilfsbereitschaft sehr schnell. Wir erkennen halt, wenn jemand bloß seine Hausaufgaben gemacht bekommen möchte, anstatt selber zu lernen.

    Eigentlich dachte ich, dass ich nun auf dem richtigen Weg bin, weil mein Lehrer das sogar gesagt hat. Anscheinend sind sogar mein Lehrer und ich auf dem Holzweg.



  • Tipp:

    IPv4 Adressen sind nicht anderes als eine 32bit Zahl. Jedes der Oktette einer IP v4 Adresse stellt 8bit dieser Zahl da. (4. Oktett Bits 0-7, 3. Oktett Bits 8-15, uws.). Das macht zumindest die Maskierung einfacher.
    Du solltest dir vllt eine Funktion schreiben, die die Eingabe einer IP Adresse übernimmt und dort auch sofort die Konvertierung vornehmen.



  • kunter schrieb:

    ...auf dem richtigen Weg bin, weil mein Lehrer das sogar gesagt hat. Anscheinend sind sogar mein Lehrer und ich auf dem Holzweg.

    Davon kannst du ausgehen.

    Gehe davon aus, dass 100% (einhundert Prozent) aller hier von Schülern,Studenten,Fachbuchlesern gestellten Probleme daher kommen, dass der jeweilige Lehrer inkompetent ist, sei er nun Professor, gehypter Fachbuchautor oder sonstwas.
    Gehe davon aus, dass du nach Absolvierung deines C Kurses NICHT C programmieren kannst.
    Gehe davon aus, dass ich weiß wovon ich spreche und dass du nicht der Erste bist, dem hier im Forum die Augen über die Fachinkompetenz seines Lehrers geöffnet werden.
    Auch du selbst hast es ja nicht mal geschafft, aus der Handvoll Subforen hier das für dein Problem richtige auszuwählen.

    Beachte auch: wir machen das hier unentgeltlich und in unserer Freizeit (beides in Gegensatz zu deinem Lehrer) und da erlauben wir uns schon mal, nicht auf jedem Müll zu antworten zumal wenn der Frager - so wie du - bewiesen hat, dass er beratungsresistent ist.


Anmelden zum Antworten