Comparaison et boucle while ; ISO C++ forbids comparison between pointer and int

Signaler
Messages postés
459
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013
-
Messages postés
459
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013
-
Bonjours,
Je souhaiterais savoir, svp,
qui pourait m'aider pour résoudre un problème,
lier a une comparaison et une boucle while,

Voici l'erreur obtenue :
      ISO C++ forbids comparison between pointer and integer

Et Voici le code ( les lignes rouge sont celle décrite par les erreurs ) :

 char* response = "";

 while( response != true && response != 2 )
 {
   printf( "\r\nSaisie, incorrect, veuillez recommencer !\r\nChoix : " );
   scanf( "%s" , response );
 }
         
 if( response == 2 )
 {
      //....
 }

   Cordialement
                ~~ DotWizard512 ~~
       
A voir également:

9 réponses

Messages postés
14817
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 septembre 2020
92
Salut,
1èrement, un pointeur ne peut pas être "true". Il peut être à la rigueur différent de NULL.
2èmement, un pointeur ne peut prendre la valeur 2. Je ne sais pas ce que tu veux tester mais là, c'est normal que ton compilo te jette...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Pointeur ne pointe sur aucun buffer dans lequel tu puisses entrer (scanf ou autre) quoi que ce soit.
char buf[100];
char *response = buf;

"response != true && response != 2"
n'a evidemment aucun sens.

ciao...
BruNews, MVP VC++
Messages postés
459
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013

Ok,
Merci pour les info,
Je m'explique, le programme affiche un choix a faire ( un ou deux )
Ma boucle while, sert a "dire",
que t'en que "response" n'est ni 1 ni 2, alors on recommence.....

Sachant que plus haut, j'ai fait :
#define true 1

  Cordialement
                ~~ DotWizard512 ~~

    
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
En gardant ton idée de base, ça ça doit marcher (si tu as bien mit ton #define true 1, mais c'est quand meme assez moche)



// Le nombre max de characteres dans la reponses + 1
#define 50 MAXCHAR
 char* response = (char*) malloc(sizeof(char)*MAXCHAR);
 




















 printf( "\r\nSaisie, incorrect, veuillez recommencer !\r\nChoix : " );
 scanf( "%s" , response );








 while(








atoi(response)








! = true &&








atoi(response)








!= 2 )










 {
   printf( "\r\nSaisie, incorrect, veuillez recommencer !\r\nChoix : " );
   scanf( "%s" , response );
 }
















         



 if( atoi(response) == 2 )

 {
      //....
 }
//...


free(response);

TuRn3r
Messages postés
459
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013

La fonction atoi() je dois la codé moi même.....?

Voici le code en entier :

#############################################################


#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#pragma comment( lib, "ws2_32.lib" )




#define true 1
#define false 0



void OpenPort( void )
{
    int Port = 0;     // Port de départ
    int count = 0;    // Nb port d'ouvert
    int returned = 0; // Retour a la ligne     ^^'
   
    WSADATA WSA;
    WSAStartup( MAKEWORD( 2 , 0 ) , &WSA );



    SOCKET Ksock;
    SOCKADDR_IN Ksin;
   
       Ksock = socket(AF_INET, SOCK_STREAM, 0);
      
             Ksin.sin_addr.s_addr = inet_addr( "127.0.0.1" );
             Ksin.sin_family = AF_INET;
             Ksin.sin_port = htons( Port );
    
         printf( "Listes des ports ouverts : \r\n" );
         printf( "\r\n-------------------------------------------------\r\n" );



              while( Port < 65536 )
              {
                if(
                   (
                     connect( Ksock , ( struct sockaddr* ) &Ksin , sizeof( struct sockaddr ) )
                   ) == 0   // Port ouvert
                  )
                  {
                     count++;
                    
                     if( returned == 10 )
                     {
                         returned = 0;
                         printf( "\r\n" );
                     }
                      else
                     {
                         returned++;    
                     }
                    
                     printf( "%d, " , Port );
                     Port++;
                  }
               }
   
    WSACleanup();         //on libére les ressources allouées
    closesocket( Ksock ); //on ferme le socket
   
         printf( "\r\n-------------------------------------------------\r\n\r\n" );
         printf( "Nombre de ports ouverts : %f\r\n\r\n", count );






   
}




int main( void )
{
 #define MAXCHARS 50
 char* response = ( char* ) malloc( sizeof( char ) *MAXCHARS );
   
    while( true )
    {
        system( "cls" );
       
         printf( "Veuillez patienter, Pendant le scan des ports,\r\nScan en cours..........\r\n\r\n" );
         OpenPort();
         printf( "Choix :\r\n1. Recommencer le scan\r\n2. Quitter\r\n\r\nChoix : " );
        
         scanf( "%s" , response );
      
         while( atoi( response ) != true && atoi( response ) != 2 )
         {
                printf( "\r\nSaisie, incorrect, veuillez recommencer !\r\nChoix : " );
                scanf( "%s" , response );
         }
        
         if( atoi( response ) == 2 )
         {
             break;
         }
        
       free( response );
    }
   
    return 0;   
}





#############################################################











  Cordialement
                ~~
DotWizard512



~~




    
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
Non, elle existe la fonction atoi.

TuRn3r
Messages postés
459
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013

A ok,
merci, mais je ne comprent pas
pourquoi lors de l'execution du programme,
aucun port n'est afficher,
alors qu'il y a bien des ports ouvert    ^^'
et puis apparament il scannerais toujours le même port,
car j'ai rajouter un printf( Port );
au cas ou le port est fermer,
et il m'affiche toujours, 0
donc il reste toujours sur le port 0







  Cordialement
                ~~
DotWizard512









~~




    
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
Plusieurs tres grosses erreurs dans ce code.
-Deja, ne t'etonne pas qu'il reste sur le port 0, car tu as beau faire un Port++, si tu fais pas un Ksin.sin_port = htons( Port );
dans ton while ca sert à rien.
-De plus il faut faire un closesocket sur chaque port et pas que sur le dernier ( met le dans le while)
-Je ne comprend pas a quoi sert returned (d'ailleurs, il sert a rien dans ton code), je peux me tromper, mais si tu rentre dans ton
  if( returned == 10 )
                     {
                         returned = 0;
                         printf( "\r\n" );
                     }
fais moi signe.
-Enfin (et j'en oubli surement) si tu fais pas de segmentation fault c'est un vrai miracle avec le      free( response ); dans la boucle while
-Ah oui j'en ai oublié (au moins :D) encore un, pour tester une connection de socket, il faut pas faire ==0 pour savoir si c ok, mais plutot un == -1 pour savoir que ca a foiré

TuRn3r
Messages postés
459
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013

D'accord je vois, il faut reprécifier le port a chaque connection
ce qui me semble normale.....       ^^'
Mais par contre Je ne suis pas tros d'accord
avec ce que tu a marquer concernant la condition de returned...
Parceque on ajoute 1 a chaque tour, donc au bout d'un moment,
on rentre forcément ds la condition....
Parcontre désolé mais j'ai rien compris concernant le
free( response );     ^^'
Pourait tu détailler s'il te plait....

Donc d'après toi le code devrait ressemblé a sa...?

###########################################################

#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include <time.h>



#pragma comment( lib, "ws2_32.lib" )



#define true 1
#define false 0



/* fonction sleep de Arnotic */



void sleep(int nbr_seconds)
{
    clock_t goal;
 
    goal = (nbr_seconds * CLOCKS_PER_SEC) + clock();
 
    while(goal > clock())
    {
        ;
    }
}



void OpenPort( void )
{
    int Port = 0;     // Port de départ
    int count = 0;    // Nb port d'ouvert
    int returned = 0; // Retour a la ligne     ^^'
   
    WSADATA WSA;
    WSAStartup( MAKEWORD( 2 , 0 ) , &WSA );



    SOCKET Ksock;
    SOCKADDR_IN Ksin;
   
         printf( "Listes des ports ouverts : \r\n" );
         printf( "\r\n-------------------------------------------------\r\n" );



              while( Port < 65536 )
              {
                if(
                   (
                     connect( Ksock , ( struct sockaddr* ) &Ksin , sizeof( struct sockaddr ) )
                   ) == -1   // Port ouvert
                  )
                  {




                     Ksin.sin_port = htons( Port );

                     count++;



                     if( returned == 10 )
                     {
                         returned = 0;
                         printf( "\r\n" );
                     }
                      else
                     {
                         returned++;    
                     }
                    
                     printf( "%d, " , Port );
                     Port++;
                     closesocket( Ksock ); //on ferme le socket
                  }
               }



         WSACleanup();         //on libére les ressources allouées 
    
         printf( "\r\n-------------------------------------------------\r\n\r\n" );
         printf( "Nombre de ports ouverts : %d\r\n\r\n", count );






   
}



int main( void )
{
 #define MAXCHARS 50
 char* response = ( char* ) malloc( sizeof( char ) *MAXCHARS );
   
    while( true )
    {
        system( "cls" );
       
         printf( "Veuillez patienter, Pendant le scan des ports,\r\nScan en cours..........\r\n\r\n" );
         OpenPort();
         printf( "Choix :\r\n1. Recommencer le scan\r\n2. Quitter\r\n\r\nChoix : " );
        
         scanf( "%s" , response );
      
         while( atoi( response ) != true && atoi( response ) != 2 )
         {
                printf( "\r\nSaisie, incorrect, veuillez recommencer !\r\nChoix : " );
                scanf( "%s" , response );
         }
        
         if( atoi( response ) == 2 )
         {
             break;
         }
        
       free( response );
    }



    printf( "\r\nEnrevoir.......         ^^" );
    sleep( 2 );
   
    return 0;   
}





###########################################################

  Cordialement
                ~~ DotWizard512~~

    

  PS: Juste une petite remarque, aparament quand j'ai changer
      le Zero de la condition par ton -1 , ben selon lui,
      tous les ports de ma machine son ouvert, lol....
      ....BizZare n'esse pas...?     :p