Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775

    [C] - Stringa di caratteri, dia in uscita un intero



    ho avuto un compito da finire per scuola, scritto in 5 minuti velocemente, senza alcuna spiegazione..
    un aborto insomma..

    il testo è:
    Inserita una stringa di caratteri, dia in uscita (se la stringa è INTERAMENTE composta da numeri, il numero (intero) corrispondente.

    il codice è il seguente, probabilmente c'è qualcosa di sbagliato, dovrei svolgerlo con le malloc, e manca il main..
    volevo semplicemente qualche dritta, su come sistemare i piccoli errori di codice e il main..

    codice:
    #include <stdio.h>
    
    int controllo(char *c){
    	while(*c!="\0" and *c>'A' and *c<'Z' and *c>'a' and *c<'z'){
    		c++;
    	}
    	if(*c="\0"){
    		return 1;
    	}else{
    		return 0;
    	}
    }
    
    int converti(char *c){
    	int lung=strlen(c)-1;
    	int b=1;
    	for(i=0;i<lung;i++){
    		num+=b*ATOI(*c)-zz;
    		b*=10;
    		c--;
    	}
    	return num;
    }
    Grazie mille,

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Nel main dichiari una stringa (un array di char) che non deve essere necessariamente allocata dinamicamente.

    Accetti in input la stringa e la passi alla funzione controllo per ottenere il valore 1 o 0. Se ottieni 1 la passi a converti ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775
    In qualche modo dovrei aver capito, grazie..

    però tipo, già compilando queste due funzioni, ho i seguenti errori:

    Compito2.c: In function ‘controllo’:
    Compito2.c:8:10: warning: comparison between pointer and integer [enabled by default]
    Compito2.c:8:17: error: expected ‘)’ before ‘and’
    Compito2.c:11:7: warning: assignment makes integer from pointer without a cast [enabled by default]
    Compito2.c: In function ‘converti’:
    Compito2.c:19:11: warning: incompatible implicit declaration of built-in function ‘strlen’ [enabled by default]
    Compito2.c:21:6: error: ‘i’ undeclared (first use in this function)
    Compito2.c:21:6: note: each undeclared identifier is reported only once for each function it appears in
    Compito2.c:22:3: error: ‘num’ undeclared (first use in this function)
    Compito2.c:22:19: error: ‘zz’ undeclared (first use in this function)


  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Analizza errore per errore ...

    Tieni presente che in C non esiste

    and

    e che un carattere si include in singoli apici non in doppi

    "\0"
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775
    Ho sistemato un pochino, ma c'è un errore alla riga 22 che non capisco.. ovvero quel "-zz".
    Ho ridato un occhio agli appunti, ma avevo copiato proprio quel codice, ma penso sia sbagliato..

    Andando un po a logica, cosa ci potrebbe andare al posto di quel "-zz"?

  6. #6
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    suggerimento

    visto che si tratta di una stringa devi controllare
    un carattere alla volta
    se è una lettera o un numero se sono tutti numeri allora trattasi di numero

    io ho provato per esercizio a fare una funzione che
    riconoscesse se si tratta di numero o di stringa
    comunque ha delle limitazioni considera solo numeri interi senza virgola
    non usa come ti è stato chiesto malloc e allocazione dinamica
    è solo un esempio ma fa un po di piu del codice che hai postato tu


    codice:
    #include <stdio.h>
    #include <stdlib.h>
    int controllo(char *c);
    
    int main(int argc, char *argv[])
    {
      int  i= controllo("213478");
      if (i==1)
        puts("è un numero");
      else
         puts ("e una stringa");
      system("PAUSE");	
      return 0;
    }
    
    
    int controllo(char *c)
    {
        int i,j=strlen(c);
        int numeri_presenti=0;
        for(i=0;i<j;i++)
        {
            if(c[i]>=48 && c[i]<=57) // se il carattere è compreso tra 1 e 9  ascii
                    numeri_presenti++;
             
            
            }
            
         if(numeri_presenti==j){//se uguale numero caratteri 
             
              return 1; // la stringa è un numero
          }    
          else 
              return 0; // la stringa contiene altri caratteri             
    	
    }
    Tecnologia

  7. #7
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    miglioramento

    con una piccola modifica alla funzione controlla
    tiene conto anche della virgola se presente una sola volta
    si tratta di un numero decimale se presente piu volte si tratta di una stringa
    codice:
    
    #include <stdio.h>
    #include <stdlib.h>
    int controllo(char *c);
    
    int main(int argc, char *argv[])
    {
      int  i= controllo("1974.899");
      if (i==1)
        puts("è un numero");
      else
         puts ("e una stringa");
      system("PAUSE");	
      return 0;
    }
    
    
    int controllo(char *c)
    {
        int i,j=strlen(c);
        int numeri_presenti=0;
        int presenza_virgola=0;
        for(i=0;i<j;i++)
        {
            if(c[i]>=48 && c[i]<=57) // se il carattere è compreso tra 1 e 9  ascii
                    numeri_presenti++;
             else if (c[i]=='.'&& presenza_virgola==0)// considera il punto decimale 
              // se presente una sola volta 
             {
                 numeri_presenti++;
                 presenza_virgola=1;
                 
                 
                 
                 
                 }
            
            }
            
         if(numeri_presenti==j){//se uguale numero caratteri 
             
              return 1; // la stringa è un numero
          }    
          else 
              return 0; // la stringa contiene altri caratteri             
    	
    }
    Tecnologia

  8. #8
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775
    Ho provato a compilare il codice (modificando STRLEN in STRLENG nella funzione controllo), ma da il seguente errore:

    /tmp/ccb3xXnz.o: In function `controllo':
    Prova2.c.text+0x5a): undefined reference to `strleng'
    collect2: ld returned 1 exit status

    EDIT: al posto della faccina, ci sarebbe un : (

    come mai?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    La strleng non esiste ... vai a caso?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    quel codice che hai postato è inutillizzabile

    lascia perdere quel codice forse è uno pseudo codice
    non certo codice c
    poi nel while le condizione non puo verificarsi
    dice maggiore o uguale ad A minore o = Z E maggiore o uguale a a
    non puo essere maggiore i A e al contempo maggiore di a piccolo non ti pare

    UN INFORMAZIONE hai detto che un esercizio per la scuola??
    ma chi ti ha insegnato parli di usare le malloc e allocazione dinamica
    ma fai fatica con un strlen
    Tecnologia

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 © 2024 vBulletin Solutions, Inc. All rights reserved.