Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23

Discussione: [c]immetere dati

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383

    [c]immettere dati

    Mi serviva una funzione per immettere dei dati numerici liberamente.
    Allora mi servo di questa funzione parsestring:

    codice:
    int ParseString(char * s, int * a, int * nMin, int * nMax)
    {
    	int nRet = 0;
    	int i = 0;
    	int j = 0;
    	char strInt[12];
    	int num;
    
    	while ( 1 )
    	{
    		/*
    		if ( isdigit( *(s + i) ) )
    		{
    			*(strInt + j) = *(s + i);
    			++j;
    		}
    		*/
    		if ( isdigit( *(s + i) ) || *(s + i) == '-' )
    		{
    			if ( (*(s + i) == '-') && (i > 0) )
    			{
    				if ( *(s + i - 1) != ' ' )
    					return 0;
    			}
    
    			*(strInt + j) = *(s + i);
    			++j;
    		}
    		else if ( *(s + i) == ' ' || *(s + i) == '\0' )
    		{
    			*(strInt + j) = '\0';
    			if ( strlen(strInt) > 0 )
    			{
    				if ( a )
    				{
    					num = atoi(strInt);
    					a[nRet] = num;
    					if ( nRet == 0 )
    					{
    						*nMin = num;
    						*nMax = num;
    					}
    					else
    					{
    						*nMin = num < *nMin ? num : *nMin;
    						*nMax = num > *nMax ? num : *nMax;
    					}
    				}
    				++nRet;
    				j = 0;
    				*strInt = '\0';
    			}
    		}
    		else
    		{
    			return 0;
    		}
    
    		if ( *(s + i) == '\0' )
    			break;
    
    		++i;
    	}
    
    	return nRet;
    }
    int ParseString(char * s, int * a, int * nMin, int * nMax)

    viene dichiarato un puntatore a int di nome a

    ma quando si usa if(a) significa che viene verificato se l'indirizzo di memoria del puntatore a e' diverso da zero?

    E poi e' scritto a[nRet] = num; ma a non era stato dichiarato come array,ma come puntatore.

    Sapete come mai?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [c]immettere dati

    Originariamente inviato da cristianc
    ma quando si usa if(a) significa che viene verificato se l'indirizzo di memoria del puntatore a e' diverso da zero?


    E poi e' scritto a[nRet] = num; ma a non era stato dichiarato come array,ma come puntatore. Sapete come mai?
    Un array di int puo' essere passato attraverso il puntatore al primo elemento ... quindi un puntatore ad int puo' essere il puntatore ad un array di int ...


    P.S. In genere, questo tipo di dubbi si hanno quando non si sono studiati (o capiti bene) i puntatori ... ti consiglio di rivedere l'argomento sul libro che usi per studiare ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Si ma allora andavano dichiarati separatamente il puntatore e l'array

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da cristianc
    Si ma allora andavano dichiarati separatamente il puntatore e l'array
    E perche'? Non hai capito bene ... il puntatore e' l'indirizzo del primo elemento dell'array !
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    E perche'? Non hai capito bene ... il puntatore e' l'indirizzo del primo elemento dell'array !
    Quindi viene implicitamente dichiarato l'array?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non viene fatto implicitamente nulla ...

    Ti ripeto ... puoi passare un array alla funzione tramite il puntatore al suo primo elemento ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Sul libro cui faccio riferimento,che e' una guida alla programmazione in c, viene specificato che se io assegno ad un puntatore il nome di un array lo posso fare in quanto il nome dell'array e' una costante e corrisponde all'indirizzo del primo elemento dell'array.

    In un esempio allegato vengono inizializzati sia l'array che il puntatore pero',per fare quell'assegnamento.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E quindi ... la domanda qual e' ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Per esempio:

    char array[n];
    char *puntatore;

    puntatore = array che e' uguale a puntatore = &array[0]

    int ParseString(char * s, int * a, int * nMin, int * nMax)
    invece
    a[nRet] = num;

    negli argomenti dovrebbe essere presente anche l'array?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La domanda non e' chiara ... comunque ...

    In primo luogo, stiamo parlando di un array di interi ... quindi

    int array[100];

    In secondo luogo, il passaggio avviene scrivendo, ad esempio

    int array[100];
    char st[100];
    int min, max;

    ParseString(st, array, &min, &max);

    A questo punto, all'interno della funzione ParseString puoi tranquillamente scrivere

    a[nRet] = num;

    per riferirsi ad array ... come se scrivessi

    array[nRet] = num;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.