Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema: non mi entra nel ciclo for!
Forum - C/C++ - Problema: non mi entra nel ciclo for!

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
FeFeZ (Normal User)
Newbie


Messaggi: 7
Iscritto: 14/06/2017

Segnala al moderatore
Postato alle 17:37
Giovedì, 15/06/2017
Ciao a tutti, di seguito vi sarà il codice del mio programma in cui sto riscontrando il problema.
Tutto funziona fino al for in cui c'è k=0;k<DIMR&&trovato==0;k++ ....il problema è che non entra in quel ciclo e non riesco a capire perché , ho sbagliato qualcosa per quanto riguarda la sintassi? (il problema consiste in una matrice letta da file in cui devo cercare ogni numero che è sia max di riga che di colonna. Nel for che parte con k=0 sto cercando il massimo di colonna rispetto alla riga in cui ho trovato il max, e poi confronterei i due max per vedere se sono uguali, ma non entra proprio in quel ciclo for!!)
grazie

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define DIMR 5
  4. #define DIMC 8
  5. int main(int argc, char *argv[])
  6.  
  7. {
  8.     int i,j,mappa[DIMR][DIMC],trovato,maxr,pos_maxr,k=0,maxc,pos_maxc;
  9.  
  10.     if(argc!=2)
  11.     {
  12.         printf("errore linea di comando");
  13.         return -1;
  14.     }
  15.  
  16.     FILE *fp;
  17.     fp=fopen(argv[1],"r");
  18.  
  19.     if(fp==NULL)
  20.     {
  21.         printf("errore file");
  22.         return -2;
  23.     }
  24.  
  25.     for(i=0;i<DIMR;i++)
  26.     {
  27.         for(j=0;j<DIMC;j++)
  28.         {
  29.             fscanf(fp,"%d",&mappa[i][j]);
  30.         }
  31.     }
  32.  
  33.  
  34.  
  35.     for(i=0;i<DIMR;i++)
  36.     {
  37.      maxr=0;
  38.      for(j=0;j<DIMC;j++)  /*trovo il max di riga*/
  39.      {
  40.          if(mappa[i][j]>maxr)
  41.          {
  42.              maxr=mappa[i][j];
  43.              pos_maxr=j;
  44.              pos_maxc=i;
  45.  
  46.          }
  47.      }
  48.         trovato=0;
  49.        for(k=0;k<DIMR&&trovato==0;k++) /*trovo il max di colonna*/
  50.        {
  51.         if(mappa[k][pos_maxr]>maxr)
  52.         {
  53.          trovato==1;
  54.         }
  55.        }
  56.       if(trovato==0)
  57.       {
  58.        printf("(%d,%d)",pos_maxc,pos_maxr);
  59.       }
  60. }
  61.     return 0;
  62.  
  63. }


Ultima modifica effettuata da FeFeZ il 15/06/2017 alle 17:45
PM Quote
Avatar
AldoBaldo (Member)
Expert


Messaggi: 346
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 17:49
Giovedì, 15/06/2017
A vista (non sono andato oltre nel leggere il codice), non è che nelle righe 43 e 44 hai scambiato pos_maxr e pos_maxc? Non lo do per certo, propongo un dubbio.

Ultima modifica effettuata da AldoBaldo il 15/06/2017 alle 17:50


Ma cosa vuoi che ne sappia? Io ci gioco, col codice, mica ci lavoro!
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:13
Giovedì, 15/06/2017
Come hai visto che "non entra"? Hai eseguito passo passo o pensi che non entri nel ciclo ma non ne sei sicuro?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Mikelius (Member)
Pro


Messaggi: 97
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 19:34
Giovedì, 15/06/2017
Potresti mandare un esempio del file da leggere?
Cosi si possono fare delle prove.


Ultima modifica effettuata da Mikelius il 15/06/2017 alle 19:39


"Io ne ho viste cose che voi umani non potreste immaginarvi...."
PM Quote
Avatar
AldoBaldo (Member)
Expert


Messaggi: 346
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 22:01
Giovedì, 15/06/2017
Sempre nell'ottica del "mi sembra strano", prova a dare un'occhiata alla riga 53... dovrebbe essere trovato==1 (come hai scritto) o trovato=1 (a me sembra più probabile).


Ma cosa vuoi che ne sappia? Io ci gioco, col codice, mica ci lavoro!
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:11
Giovedì, 15/06/2017
Sicuramente deve essere

trovato=1

Per questo motivo ti SEMBRA che non sia entrato nel ciclo, ma ci entra ...

Devi imparare a fare un po' di debugging, impostare breakpoint, eseguire passo passo le linee di codice e controllare il valore delle variabili durante l'esecuzione. Così risolverai questi problemi banali.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
AldoBaldo (Member)
Expert


Messaggi: 346
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 22:17
Giovedì, 15/06/2017
Nessuno, mi sa che hai risposto a me pensando di rispondere a FeFeZ...


Ma cosa vuoi che ne sappia? Io ci gioco, col codice, mica ci lavoro!
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:25
Giovedì, 15/06/2017
Testo quotato

Postato originariamente da AldoBaldo:

Nessuno, mi sa che hai risposto a me pensando di rispondere a FeFeZ...



No. ho proprio risposto a te con le prime due righe.

E a FeFeZ per il resto ...

:-)


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
FeFeZ (Normal User)
Newbie


Messaggi: 7
Iscritto: 14/06/2017

Segnala al moderatore
Postato alle 12:58
Venerdì, 16/06/2017
Innanzitutto ringrazio tutti per le risposte!
Ho risolto il problema, come detto da alcuni di voi alla riga 53 dovevo scrivere trovato=1 e non trovato==1 come ho scritto io.
Comunque affermavo che non entrasse nel ciclo perché avevo provato ad utilizzare il debug e vedevo che nel momento in cui arrivava a quel for lo saltava completamente ed usciva con k=5 (ancora adesso non riesco a spiegarmi il perché xD).
Comunque mettendo trovato=1 ho risolto il problema ed ora il programma funziona.
Grazie a tutti :)

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo