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 - 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

cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
12 juil. 2008 à 23:32
avec i=500 on demande si c'est possible que i soit égale à 500

--> NON. On ne demande rien, on affecte (on stocke) 500 dans i (ou autre chose que 500 s'il y a un problème de capacité) et comme cette affectation est toujours réalisée l'ensemble i=500 est toujours vrai !



avec i==500 on demande si i est égale à 500 ?

--> OUI







Jean-François
3
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
12 juil. 2008 à 01:11
deja i=500 || ch[i][j] = 0 donne toujours vrai ca devrai etre

i==500 || ch[i][j] == 0
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
12 juil. 2008 à 01:19
j'ai essayé avec ta solution, cette fois-ci il n'y a plus d'erreur mais
je n'obtient pas le resultat que j'attend, je veu en fait que si
j'arrive au bout de la ligne d'une tableau ou alors que le caractère
actuel égale à 0, alors je saute une ligne et je recommence avec la
deuxieme ligne du tableau, or ta solution semble écrire 500 fois "\n" .
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
12 juil. 2008 à 03:15
ch[i][j] esttu sur qu'il y a quelque chose 
0

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

Posez votre question
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
12 juil. 2008 à 03:25
puisque j'ai vue plusieur erreur et je suis pas sur de ce que tu veux faire voila le code refait

#include <cstdlib>
#include <windows.h>
main()
{
      int ch[500][500];
      ch[0][0]=65;
      ch[1][0]=66;
      ch[2][0]=67;
      ch[499][0]=65;
      ch[499][1]=66;
      ch[499][2]=67;
      ch[499][3]=0;
      long i = 0;
      long j = 0;
      for(j=0;j<500;++j)
      {
          i=0;
          while(i<500 && ch[j][i] > 0)
          {
              putchar(ch[j][i]);
              ++i;
          }
          printf("\n");
         
          Sleep(10);
      }
}

donne:
a
b
c
.... 496 ligne apres
abc

voila
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
12 juil. 2008 à 17:00
aparement je ne suis pas assez clair, en fait vola ce que je souhaite
obtenir : je veut en fait afficher tout les caractères du tableaux
exepté lorsque ch[i][j]=0. Si tel est le cas je saute une ligne et si
le reste du tableau est égale a 0, alors on écrit pas la suite.

exemple ici, je doit obtenir :

abc

<-- ici un saut de ligne

Voila. En fait je ne veut pas les 500 lignes entre puisque ces valeurs sont égales a 0.

J'espere avoir été assez clair. Merci pour tes réponses
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
12 juil. 2008 à 17:55
lorsque ch[i][j]=0. Si tel est le cas je saute une ligne
Voila. En fait je ne veut pas les 500 lignes entre puisque ces valeurs sont égales a 0.

!!! marche pas ton affaire
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
12 juil. 2008 à 18:01
#include <cstdlib>
#include
#include <windows.h>
main()
{
      int ch[500][500];
      ch[0][0]=65;
      ch[1][0]=66;
      ch[2][0]=67;
      ch[499][0]=65;
      ch[499][1]=66;
      ch[499][2]=67;
      ch[499][3]=0;
      long i = 0;
      long j = 0;
      for(j=0;j<500;++j)
      {
          i=0;
          if ( ch[j][0] > 0 )
        {
          while(i<500 && ch[j][i] > 0)
          {
            
              putchar(ch[j][i]);
              ++i;
          }
            printf("\n");
        }
       
         
          Sleep(10);
      }
}

donnne
a
b
c
abc
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
12 juil. 2008 à 18:09
admetton que le tableau soit  ch[5][5];

et que

ch[0][0] = 65;

ch[1][0] = 66;

ch[2][0] = 67;

ch[3][0] = 68;

ch[4][0] = 69;


ch[0][1] = 65;


ch[1][1] = 66;


ch[2][1] = 67;


ch[3][1] = 68;


ch[4][1] = 69;


et que toutes les autres cases de ch soit égale à 0, je veut ke mon programme m'affiche :

abcdef

abcdef

<-- et ici il saute une ligne pusique tous les autres caractère sont égale a 0;

Commetn faire?
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
12 juil. 2008 à 18:30
premierement tu te trompes dans ton tableau

ch[0][0] = 65;
ch[1][0] = 66;
ch[2][0] = 67;
ch[3][0] = 68;
ch[4][0] = 69;

ch[0][1] = 65;
ch[1][1] = 66;
ch[2][1] = 67;
ch[3][1] = 68;
ch[4][1] = 69;

donne
AA
BB
CC
DD
EE

pour que ca donne
abcde

ch[0][0] = 65;

ch[0][1] = 66;

ch[0][2] = 67;

ch[0][3] = 68;

ch[0][4] = 69;


ch[1][0] = 65;

ch[1][1] = 66;

ch[1][2] = 67;

ch[1][3] = 68;

ch[1][4] = 69;
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
12 juil. 2008 à 18:42
pas forcement si on lit en colonne comme je l'ai fait dans mon code source ^^
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
12 juil. 2008 à 19:09
c'est bon j'ai réussi ! voici le code source merci beaucoup pour ton aide !
#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;
      ch[0][1]=68;
      ch[1][1]=69;
      ch[2][1]=70;
      ch[499][1]=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[0][j]!=0){
                                           printf("\n");
                                           i=0;
                                           }
                                      }
Sleep(5000);
}

Encore merci et bonne programmation
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
12 juil. 2008 à 21:21
Bonsoir,

if (i=500 && ch[0][j]!=0) --> if (i==500 && ch[0][j])

i=500 est toujours vrai et ne sert à rien, autant mettre directement if (ch[0][j] != 0)

Jean-François
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
12 juil. 2008 à 22:53
tu as raison je crois mais pourquoi i=500 est toujours vrai ? et quelle est la différence si je mais i==500 ? merci de ta remarque
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
12 juil. 2008 à 23:01
i=500 verifie si i peux egualer 500 donc toujours vrai
i==500 verifie si i vaux 500
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
12 juil. 2008 à 23:03
Parce qu'une affectation est toujours réussie !

Je mets 500 dans i ? oui ! toujours oui !

Une affectation est toujours possible, même s'il y a des problèmes de dépassement de capacité ou de signe (dans ces cas là, la valeur affectée sera peut-être différente de ce qui est attendu, mais il y aura quelque chose d'affecté).
Jean-François
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
12 juil. 2008 à 23:12
ok merci donc avec i=500 on demande si c'est possible que i soit égale à 500 et avec i==500 on demande si i est égale à 500 c'est ca?
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
12 juil. 2008 à 23:18
quand tu fais un if toujours utilisé les operateur logique suivantes
equale a
!= different de
< plus petit que
> plus grand que
<= plus petit au eguale à
>= plus grand ou equale à
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
12 juil. 2008 à 23:30
ok merci!
0
hacker_mt Messages postés 35 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 4 novembre 2010
13 juil. 2008 à 00:28
ok merci beaucoup pour ces précisions , je pense avoir compris.
0
Rejoignez-nous