Newsgroup: it.comp.lang.c
Titolo: Da stringhe a float

Salve a tutti scusate se allego il file ma è tutto il pomeriggio che sto 
lottando con un problema apparentemente irrisolvibile....Di nuovo scusate 
per il lungo messaggio...
Devo convertire una stringa in un double e a prima vista la cosa 
sembrerebbe molto facile tanto è vero che ho scritto un programmino stupido 
stupido che fa il lavoro a meraviglia
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main(void)
{
  char c[19]="25.55",*endptr;
  double value;
  clrscr();
  //value=strtod(c, &endptr);
  value=atof(c);
  printf("La stringa e' %s il valore e' %lf",c,value);
  getch();
}
ora se riutilizzo lo stesso codice o più meno simile mi ritrovo nella mia 
variabile delle conversioni assurde...ho allegato a tal proposito il codice 
sorgente del programma che stavo sviluppando con il Turbo C++ 3.0
il problema si verifica in questo segmento di codice...riga 112
if ((com[posizione+1]==',')||(com[posizione+1]==')'))
{
	for (k=i+1;k<20;k++) argchar[k]=0;
    	//strcpy(arg,argchar);
	flushall();
	dbltemp=atof(argchar);
	argomenti[j]=dbltemp;
	j++;
	i=-1;
}
pensando che ci fossero problemi di buffer ho inserito molti flushall
grazie a tutti per l'interessamento
#include <stdio.h>
#include <conio.h>
#include <string.h>
//#define RIGA "                                                                                
"
#define BLANK " "
#define COMANDI_MAX_LENGHT 30
#define COMANDI_NUMERO 3
#define NUMERO_ARGOMENTI 10
// DICHIARAZIONE DEI COLORI
 int TxtTitle     =RED;
 int TxtMain	  =LIGHTBLUE;
 int TxtComando   =WHITE;
 int Sfondo1      =LIGHTGRAY;
// DICHIARAZIONE DEI COMANDI RICONOSCIUTI
char *_token[]={
"Droll",
"Dpitch",
"Dbase"
};
void DispGcmInterface()
{
	clrscr();
	textcolor(TxtTitle);
	textbackground(Sfondo1);
	cprintf("%80s\r\n",BLANK);
	gotoxy(1,2);
	cprintf("%80s\r\n",BLANK);
	gotoxy(1,20);
	cprintf("%80s\r\n",BLANK);
	gotoxy(1,21);
	cprintf("%80s\r\n",BLANK);
	gotoxy(1,22);
	cprintf("%80s\r\n",BLANK);
	gotoxy(1,23);
	cprintf("%80s\r\n",BLANK);
	gotoxy(25,1);
	cprintf ("Get Command Ver 0.01 - Gruppo 16");
	gotoxy(4,4);
	textbackground(BLACK);
	textcolor(TxtMain);
	cprintf("COMANDO >");
}
unsigned short int ParseValidate(char com[COMANDI_MAX_LENGHT])
{
  int i,j=0,k,comandotrovato=-1;
  unsigned short int posizione=0,trovato=0; //Specifica se il comando e' 
stato trovato nell'elenco
  const int NOTHING=2;
  char temp[COMANDI_MAX_LENGHT];
  char *argchar, *arg, *endptr;
  double argomenti[NUMERO_ARGOMENTI],dbltemp;
  char c;
  if ((com[0]=='#')||(com[0]==' ')) return NOTHING; //Controlla se la riga 
contiene un
  //if (com[0]=='(')||(com[0]==')')||(com[0]=='');  //commento o se non e' 
necessario fare qualcosa
  j=0;
  for (i=0;i<strlen(com);i++)
  {
	flushall();
	fflush(stdin);
	c=com[i];
	temp[i]=c;
	j=i;
	if(com[j+1]=='('){posizione=j+2; break;} //Qua forse si presenta un 
bug
	flushall();										 
//Mi posiziono direttamente sul primo argomento
  }
  //Serve per pulire la variabile che si sporca
  k=strlen(temp);
  if ((k>strlen(com))||(k>i+1))
  {
   //for (k;k>i;k--)
   temp[i+1]=0;
  }
  for (i=0;i<COMANDI_NUMERO;i++)
  {
	  if (trovato=(!stricmp(temp,_token[i]))) {comandotrovato=i;break;}
  }
  if (!trovato) return 0; //Se non ha trovato il comando nel suo elenco non
						  // bisogno di continuare
// QUESTA PARTE DI CODICE VIENE ESEGUITA SOLO SE E' STATA TROVATA LA PAROLA 
CHIAVE
  i=0;
  j=0;
  if (!posizione==0){
	for(;;)
	{
		if ((com[posizione]==')')||(posizione==COMANDI_MAX_LENGHT)) 
break;
		else if (com[posizione]==',') { posizione++; continue;}
		c=com[posizione];
		fflush(stdin);
		argchar[i]=c;
		if ((com[posizione+1]==',')||(com[posizione+1]==')'))
		{
			for (k=i+1;k<20;k++) argchar[k]=0;
			//strcpy(arg,argchar);
			flushall();
			dbltemp=atof(argchar);
			argomenti[j]=dbltemp;
			j++;
			i=-1;
		}
		posizione++;
		i++;
	}//Fine For
  }//Fine IF
  if ((!stricmp(temp,_token[0]))&&((j)==2)) //chiamo la funzione associata
  {
	//Droll(argomenti[0]);
	return trovato;
  }
}
void GetCmdKey(){
	 char comando[COMANDI_MAX_LENGHT];
	 int i=1; //Numero di istruzioni
	 unsigned short int IsValid=1; //Variabile di Stato
								   //Determina se la macro 
esiste o meno
	 for(;;)
	 {
		gotoxy(15,4);
		textcolor(TxtComando);
		printf(" ");
		scanf("%30s",comando);
		fflush(stdin);
		if (!stricmp(comando,"EXIT")) break;
		else
		{
			if ((IsValid=ParseValidate(comando))==1) {
				//Pulisco l'output
				gotoxy(5,22);
				textbackground(Sfondo1);
				textcolor(TxtTitle);
				printf("Comando: %32s","");
				//Stampo l'ouput
				gotoxy(5,22);
				printf("Comando: %d %s",i,"VALIDO");
				i++;; //Verifica e Parserizza il comando
			 }
			else if (IsValid==0)
			{
				//Pulisco l'output
				gotoxy(5,22);
				textbackground(Sfondo1);
				textcolor(TxtTitle);
				printf("Comando: %32s","");
				//Stampo l'ouput
				gotoxy(5,22);
				printf("Comando: %d %s",i,"NON VALIDO");
			}
		}
		//Pulisco l'input
		textbackground(BLACK);
		gotoxy(15,4);
		printf("%30s","");
		//Mi riposiziono sull'input
		gotoxy(15,4);
	}   //Fine For
}
void GetCmdFile(char *gcmfile){
// printf("provo ad aprire %s",gcmfile);
	getch();
}
void main(int argc, char *argv[])
{
   textbackground(BLACK);
   clrscr();
   if (argc!=2)
   {
	clrscr();
	printf (" USO: getcmd [-p]||[nomefile.gcm]\n\n -p:\t\tPer attivare 
l'input dei comandi da tastiera\n");
	printf (" nomefile:\tPer far leggere la sequenza di comandi dal file 
specificato");
	exit(1); //Condizione di Errore mancano argomenti
   }
   DispGcmInterface();
   if (!stricmp(argv[1],"-p")) GetCmdKey();
   else	 GetCmdFile(argv[1]);
}

	fflush(stdin);
fflush e' definito solo per gli stream di output.
Non so che comportamento assumano le righe in cui compare per TURBO C
sulla tua macchina.
Perche' non fai un debug passo passo ?
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

"Alessio" <REMOV...@tiscalinet.itREMOVE> ha scritto nel messaggio
news:Xns9045E3884qu...@195.130.225.75...
: Salve a tutti scusate se allego il file ma è tutto il pomeriggio che sto
: lottando con un problema apparentemente irrisolvibile....Di nuovo scusate
: per il lungo messaggio...
Se confronti il codice funzionante con quello non funzionante, vedrai che
nel primo c'e` #include <stdlib.h>
susanna