Oppure

Loading
02/06/09 17:43
AlesPalla
Premetto che ho iniziato oggi a programmare in c++.
Ho incontrato un errore che francamente non capisco in un ciclo for. Questo è il codice:
int main(int argc, char *argv[])
{
  for(int n=1;n <= 100;n++){
          if (fun(n)) printf("%d \n",n);              
          }         
  system("PAUSE");  
  return 0;
} 


fun() è una funzione di un integer che da true o false a seconda di quale numero inserisco..
Facciamo un esempio:
Se tolgo il ciclo for e creo un programma fatto in queto modo:
int main(int argc, char *argv[])
{
          if (fun(atoi(argv[1]))) printf("%d \n",atoi(argv[1]));                      
  system("PAUSE");  
  return 0;
} 

la funzione funziona(scusate :)) in maniera egregia per esempio stampando i valori 1,2,3 e 5 mentre non stampa il 4.Perfetto.
Ma quando faccio partire quella con il ciclo for mi visualizza solo 1,2 e 3 come se il ciclo, una volta che ha visto che con 4 non doveva stampare nulla, saltasse l'istruzione if facendo si che il 5 non venga visualizzato!!

Non ci stò capendo più nulla!!! Dove stà l'errore?Grazie in anticipo x le risposte
Ultima modifica effettuata da AlesPalla 02/06/09 17:44
aaa
02/06/09 19:07
theprogrammer
La possiamo vedere questa funzione fun ?
aaa
03/06/09 8:33
gigisoft
Postato originariamente da theprogrammer:

La possiamo vedere questa funzione fun ?


Beh... si la cosa piu' probabile e' che in qualche modo la funzione modifichi il valore di n con un intero maggiore di 100, causando l'uscita dal ciclo.
aaa
03/06/09 9:15
theprogrammer
Postato originariamente da gigisoft:


Beh... si la cosa piu' probabile e' che in qualche modo la funzione modifichi il valore di n con un intero maggiore di 100, causando l'uscita dal ciclo.


Esatto ... e' per questo che ho chiesto di vedere la fun ...
aaa
03/06/09 13:14
AlesPalla
La funzione fun è questa:
bool fun(int c) {
bool a,b;
int k=1;

while(k<9) {
  k++;
  if(k==c) {
   a=true;    
  } else {      
   if ((c%k)==0) {
    a=false;
   } else {
    a=true;
   }  
   b=b&&a;              
  }    
}  
 return  b;    
}    

E' presa da un progetto di questo sito. Volevo vedere come funzionava...
Comunque ho risolto aggiungendo un printf inutile al ciclo for(in poche parole non stampa nulla!!!) Ora vi posto il codice completo.
#include <iostream>
#include <stdlib.h>

using namespace std;

bool fun(int c) {
bool a,b;
int k=1;

while(k<9) {
  k++;
  if(k==c) {
   a=true;    
  } else {      
   if ((c%k)==0) {
    a=false;
   } else {
    a=true;
   }  
   b=b&&a;              
  }    
}  
 return  b;    
}    

int main(int argc, char *argv[])
{ 
  for(int n=1;n <= 100;n++){
  printf("");
          if (fun(n)) printf("%d \n",n);              
          }         
  system("PAUSE");  
  return 0;
} 

Il fatto è che non capisco perchè serva quel printf(ma ho notato che funziona lo stesso a condizione di mettere un pezzo di codice nel ciclo for svincolato dall'if!!)
aaa
03/06/09 14:28
theprogrammer
All'interno della funzione la variabile b DEVE essere inizializzata ... ad esempio

bool a, b = true;
aaa