Probleme c++, compatibilité pow(n,k) et %

Bonjour,
J'essaie de faire un programme en c++ mais je ne comprend pas ou est l'erreur,
___________________________________________________
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;

int nbrdechifr(int x)
{
int k = 1,;
while( x % pow(10,k) != x);
{ k == k+1; }
return k;
}
[...]
_____________________________________________________

L'erreur se trouve a la ligne ou se trouve le while, il me dit "invalid operands of types 'int' and 'double' to binary 'operator%' "

merci de votre aide

2 réponses

  1. bonjour,

    les opérandes de modulo (%) doivent être des types entiers et pow(x,y) retourne un type double.
    attention à l'écriture:
    un ; après le while signifie que l'instruction while est terminée. (donc votre while ne fait rien.)
    une affectation en C (ou C++) est réalisée par un opérateur = (k=k+1)
    l'opérateur == est un opérateur de comparaison.

    cdlt
    0
    1. Voici ton code corrigé

      int nbrdechifr(int x) 
      { 
      int k = 1; 
      // Ici le (int) est un cast pour utiliser le % sans soucis 
      while( x % (int) pow(10.0,k) != x) 
      { 
           // Ici il faut utiliser =(affectation) au lieu de == (comparaison) 
          k = k+1;
      } 
      return k; 
      } 
      
      0
      1. en C (C++) k=k+1 est souvent délaissé au profit de l'incrémentation unaire ++k ou k++;
        le code du while pourrait se résumer à
        while(x % (int)pow (10.0,k++) != x) ;
        0
      2. oui k++ serait avantagé mais bon c'est plus compréhensible pour quelqu'un qui débute. oui le while peut être aussi raccourci comme cela mais pour la même raison que j'ai cité tout à l'heure c'est mieux de bien développer pour mieux comprendre
        0
      3. Contributeur
        A ydurce,

        Sauf que si tu fais ton while (... k++), il ne faut pas oublier de dire qu'il faut mettre return k-1; au lieu de return k...
        0
      4. tout a fait ou k=0 si on met ++k
        0
      5. pour vicking54:
        l'opérateur ++ (ou --) est important en C ou C++ car il est associé à la notion de pointeur ou d'itérateur et doit être abordé et compris très tôt. D'autant que l'opérateur = est une aberration mathématique auquel on devrait substituer dans ce cas là l'opérateur +=.
        pour le while, je suis d'accord avec toi sur le peu d'intérêt d'une contraction sinon à faire appréhender les notions de post ou pré incrément qui créent des différences importantes dans les résultats comme l'a justement noté fiddy.
        0