Je n'y comprend plus rien :-(

ChrOnOs83 Messages postés 32 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 19 juin 2007 - 3 avril 2004 à 04:56
gasy72 Messages postés 23 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 11 août 2006 - 4 mars 2006 à 02:33
Slt à ts,
tout dabor je suis dsl mais je ne savai pa tro comen resumé mon pb en quelque mot et c pr cela ke je né pa fai un sujet clair.
en realité jaimerai reussir a faire un programme qui donne son ip par messagebox.
le truc c ke j'ai dabord utilisé la la fonction trouvant l'ip de la source de laigle76 mais j'ai remarqué que chez certaine personne cela donne l'ip de leur carte rezo.
bref ensuite je me suis di qu'il valai mieu ke je le fasse avec en metan dans un char* la copi dune sortie d'un ipconif et en cherchan l'ip dans se char *.
voici en gro la fonction ki li le fichier txt sapelan findip.txt et se trouvant a la racine du c :

char mot[1000] = "\0";
char ipa[20]="\0";
FILE *ipconfig =fopen("c:\\findip.txt","r");
fgets(mot,1000,ipconfig);
fclose(ipconfig);
char chiffre[] = {'0','1','2','3','4','5','6','7','8','9','.','\0'};
char sous_reseau[] = {'2','5','5','.','2','5','5','.','2','5','5','.','2','5','5','\0'};
int i=0;
int j=0;
MessageBox (0,mot,"",0);
while (1)
{
i++;
j=0;
if (mot[i]==sous_reseau[j])
{
while (mot[i]==sous_reseau[j])
{
j++;
i++;
test[i] = mot[i];
}
if (j>=16)
{
i = i - (j + 1);

while(1)
{
i--;
if ((mot[i]==chiffre[0])||(mot[i]==chiffre[1])||(mot[i]==chiffre[2])||(mot[i]==chiffre[3])||(mot[i]==chiffre[4])||(mot[i]==chiffre[5])||(mot[i]==chiffre[6])||(mot[i]==chiffre[7])||(mot[i]==chiffre[8])||(mot[i]==chiffre[9])||(mot[i]==chiffre[10]))
{
while ((mot[i]==chiffre[0])||(mot[i]==chiffre[1])||(mot[i]==chiffre[2])||(mot[i]==chiffre[3])||(mot[i]==chiffre[4])||(mot[i]==chiffre[5])||(mot[i]==chiffre[6])||(mot[i]==chiffre[7])||(mot[i]==chiffre[8])||(mot[i]==chiffre[9])||(mot[i]==chiffre[10]))
{
i--;
}
i++;
while ((mot[i]==chiffre[0])||(mot[i]==chiffre[1])||(mot[i]==chiffre[2])||(mot[i]==chiffre[3])||(mot[i]==chiffre[4])||(mot[i]==chiffre[5])||(mot[i]==chiffre[6])||(mot[i]==chiffre[7])||(mot[i]==chiffre[8])||(mot[i]==chiffre[9])||(mot[i]==chiffre[10]))
{
ipa[j] = mot[i];
i++;
j++;
}
}
}
}
}
if (i==999)
{
strcpy(ipa,"non connecté");
break;
}
}
MessageBox (0,ipa,"",0);
return(0);
}


je me doute que se code est sousoptimisé :-) et jen suis dsl pr les puriste mais franchement apré avoir essayé fread, fgetc, et encor plein dotre fonction don je ne me souvien plus seul fgetc passé donc...

voici une copi de mon findip.txt :
Configuration IP de WindowsCarte Ethernet Connexion au réseau local: Statut du média . . . . . . . . . : Média déconnectéCarte PPP Internet ADSL : Suffixe DNS propre à la connexion : Adresse IP. . . . . . . . . . . . : 62.147.136.101 Masque de sous-réseau . . . . . . : 255.255.255.255 Passerelle par défaut . . . . . . : 62.147.136.101

dailleur a se propos quelque che se bizar se passe.
a la base mon findip.txt est bien fai avec des sot de ligne.
mais le probleme est qu'il comence par un sot de ligne et si je n"enleve pa se sor de ligne mon fgets(mot,1000,ipconfig) ne passe pas (mot=null).
a partir du momen ou je lenleve (avec le notpad) il devien comme la copi ke je vien de vous faire c a d en bordel...

sinon se qui decone dans ma source c que le MessageBox (0,mot,"",0) affiche bien le contenu de mon findip.txt mais par contre le MessageBox (0,ipa,"",0) affiche tjr non connecté...

bref si quelqu'1 trouve pouquoi c le k je lui en suis deja reconaissant ;-) sinon... jformat.

5 réponses

G0ss3Yn Messages postés 65 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 5 novembre 2010
5 avril 2004 à 19:57
Hello !
J'ai eu un peu la flemme d'étudier ton code.. :D
Alors pour t'aider quand même, j'ai programmé l'appli que tu veux, comme ça tu pourras regarder comment le faire de façon simple. J'utilise les fonctions C++ pour l'accés au fichier.... Attention donc.
Voilà !
G0ss3Yn... ( Bon coding a tous !)

#include <windows.h>
#include <fstream.h>
#include <stdlib.h>

INT APIENTRY
WinMain( HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd )
{
char buffer [ 256 ] ;
char ip [ 256 ] = "" ;
ifstream file ;
bool GotIt = false ;

// Ici on met la sortie de ipconfig dans ip.txt
system( "ipconfig > "C:\\ip.txt"" ) ;

// On ouvre le fichier
file.open( "C:\\ip.txt" ) ;

while( file.getline( buffer, 256 ) )
{
if( strcmp( buffer, "" ) == 0 ) continue ;

// On cherche la sous-chaine "Adresse IP"
if( strstr( buffer, "Adresse IP" ) )
{
strcpy( ip, buffer + 44 ) ;
continue ;
}

// On met '\0' à la fin de la ligne, pour strcmp
// compare correctement
buffer [ 57 ] = '\0' ;

// Si la ligne contient "255.255.255.255"
// alors, le buffer contient l'adresse ip
if( strcmp( buffer + 44, "255.255.255.255" ) == 0 )
{
GotIt = true ;
break ;
}
}

if( ! GotIt )
strcpy( ip, "Non connecté" ) ;

MessageBox( NULL, ip, "Adresse ip", MB_OK | MB_ICONINFORMATION ) ;

file.close( ) ;

return 0 ;
}

C'est le bordel, mais si tu fais copier/coller, ça ira ;)
0
ChrOnOs83 Messages postés 32 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 19 juin 2007
5 avril 2004 à 21:01
merci bcp pr ta reponse G0ss3Yn !!!
le pb ke g encor c ke g pa la librairi fstream...
chui sur ke mon visual studio merde grave parceke g tro eu de pb avec stistoir de lectur de fichier (tu c pa tt se ke g essayé)
enf1 bref g kan meme reecri le code ke javai fai
il est plu clair mais sa marche tjr pa...
le voici o k ou :

test()
{

char mot[1000] = "\0";
char ipa[20]="\0";
char srezo[20];
FILE *ipconfig =fopen("c:\\findip.txt","r");
fgets(mot,1000,ipconfig);
fclose(ipconfig);
char chiffre[] = {'0','1','2','3','4','5','6','7','8','9','.','\0'};
char sous_reseau[1000];
    int i=0;
int j=0;
int k=0;
MessageBox (0,mot,"",0);
strcpy (sous_reseau,"255.255.255.255");
while (i<1000)
{
i++;
while (mot[i]==sous_reseau[j])
{
srezo[j]=mot[i];
j++;
i++;
}

if (j>15)
{
MessageBox(0,srezo,"",0);
i = i - 30;
j=0;
strcpy(srezo,"\0");
srezo[j]=mot[i];
MessageBox(0,srezo,"",0);
while(1)
{
i--;
while ((mot[i]==chiffre[0])||(mot[i]==chiffre[1])||(mot[i]==chiffre[2])||(mot[i]==chiffre[3])||(mot[i]==chiffre[4])||(mot[i]==chiffre[5])||(mot[i]==chiffre[6])||(mot[i]==chiffre[7])||(mot[i]==chiffre[8])||(mot[i]==chiffre[9])||(mot[i]==chiffre[10])||(mot[i]==chiffre[11]))
{
ipa[j] = mot[i];
                    i--;
j++;
}
k=1;
if (j!=0){break;};
            }
}

if (k!=0){break;}
}

//strcpy(ipa,"non connecté");
MessageBox (0,ipa,"",0);
return(0);
}
0
G0ss3Yn Messages postés 65 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 5 novembre 2010
5 avril 2004 à 23:53
Ok, ça ne marche pas apparemment parce que tu ne récupère pas toute la sortie dans ton buffer 'mot', mais que la première ligne donc c'est normal...
Voici le code à modifier pour que toute la sortie soit dans ton buffer 'mot' :

char buffer [ 256 ] ;
char mot [1024] = "\0" ;
char ipa [20] = "\0" ;
char srezo [20] ;

// On met la sortie de ipconfig dans findip.txt
system( "ipconfig > "C:\\findip.txt"" ) ;

// On ouvre le fichier
FILE *ipconfig = fopen("c:\\findip.txt","r");

// On récupère toute la sortie dans ton buffer ( mot )
while( fgets( buffer,1000,ipconfig ) != NULL )
strcat( mot, buffer ) ;

fclose(ipconfig);

Mais même comme çela ça ne marche pas, ton algorithme doit être certainement faux....
Quoiqu'il en soit, voici le code qui fonctionne, en C cette fois :D

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

INT APIENTRY
WinMain( HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd )
{
char buffer [ 256 ] ;
char mot [ 1024 ] = "\0" ;

char ip [ 256 ] ;
char * tmp ;

bool GotIt = false ;

// On met la sortie de ipconfig dans findip.txt
system( "ipconfig > "C:\\findip.txt"" ) ;

// On ouvre le fichier
FILE *ipconfig = fopen("c:\\findip.txt","r");

// On récupère toute la sortie dans ton buffer ( mot )
while( fgets( buffer, 256,ipconfig ) != NULL )
strcat( mot, buffer ) ;

fclose(ipconfig);

// On cherche le 'token' "\n"
tmp = strtok( mot, "\n" ) ;

while( tmp )
{

// On cherche la sous-chaine "Adresse IP"
if( strstr( tmp, "Adresse IP" ) )
{
strcpy( ip, tmp + 44 ) ;

// On cherche le nouveau token
tmp = strtok( NULL, "\n" ) ;
continue ;
}

// Si la ligne contient "255.255.255.255"
// alors, le buffer contient l'adresse ip
if( strncmp( tmp + 44, "255.255.255.255", 15 ) == 0 )
{
GotIt = true ;
break ;
}

// On cherche le nouveau token '\n'
tmp = strtok( NULL, "\n" ) ;
}

if( ! GotIt )
strcpy( ip, "Non connecté" ) ;

MessageBox( NULL, ip, "Adresse ip", MB_OK | MB_ICONINFORMATION ) ;

return 0 ;

}

En espérant avoir résolu ton problème....
A plus tard ! :)

G0ss3Yn... ( Bon coding a tous !)
0
ChrOnOs83 Messages postés 32 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 19 juin 2007
6 avril 2004 à 00:51
Exelent !!!
jvien de tester et sa marche nikel
franchement merci bcp pr ton aide !!
en plus grace a toi g bien compri le fonctionement de fgets et ainsi ke lutilisation de strtok pr rechercher un mot dans un char* (ici un saut de ligne) (enf1 c ske g compri jme plante petetre :-)...)
bref merci bcp !!!!!!!!!!!
@+
ChrOnOs
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gasy72 Messages postés 23 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 11 août 2006
4 mars 2006 à 02:33
impec mci

crois seulement
0
Rejoignez-nous