Probleme de non-lvalue in assignment

Résolu
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010 - 12 juil. 2008 à 00:41
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 13 juil. 2008 à 04:05
Bonjour, je developper un programme d'écriture de caractère ascii a partir d'un tableau 2D dont voici le code source :
#include <cstdlib>
#include
#include <windows.h>
main()
{
      long ch[500][500];
      ch[0][0]=65;
      ch[1][0]=66;
      ch[2][0]=67;
      ch[499][0]=0;
      long i = 0;
      long j = 0;
      for(j=0;j<500;++j){
                         while(i<500 && ch[i][j] != 0){
                                      putchar(ch[i][j]);
                                      ++i;
                                      }
                                      if(i=500 || ch[i][j] = 0){
                                           printf("\n");
                                           i=0;
                                           }
                                      }
Sleep(5000);
}

mais lors de la compilation, j'ai l'erreur suivante : non-lvalue in assignment a la ligne if(i=500 || ch[i][j] = 0){

Pouriez-vous m'aider à passer ce probleme, merci d'avance.

21 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 juil. 2008 à 04:05
"

Parce qu'une affectation est toujours réussie !

Je mets 500 dans i ? oui ! toujours oui !"

"et comme cette affectation est toujours réalisée l'ensemble i=500 est toujours vrai !"

Je n'aime pas du tout comment est dite la chose, car ceci pourrait faire croire que if((i = 0)) sera vrai aussi. En effet, l'affectation de 0 à i est réussie. Cependant, la condition sera toujours fausse.

On ne test pas si l'affectation réussi.
L'affectation est d'abord effectuée puis ensuite on évalue la condition.
Faire if((i=0)) revient tout simplement à faire

i = 0;
if(i != 0) { // != 0 pour être plus explicite
    ...
}

On peut aussi faire des trucs dans le genre
if((i fonction(1234)) 25) {
    ...
}

ce qui reviendra à:

i = fonction(1234);
if(i == 25) {
    ...
}

C++ (@++)<!--
0
Rejoignez-nous