Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    {C} Crash :(

    Ciao a tutti, ho un problema che mi affligge da parechio tempo:

    Ho fatto un semplice programmino che fa vari calcoli geometrici, che però quando viene inserita una lettera va in crash:
    Es.

    scanf("%d", &numero1);

    Se in questo scanf gli do una lettera o un simbolo, il programma va in crash...
    Mi hanno consigliato di fare così:

    if(!scanf("%d", &numero1))
    printf("Il tipo di dato inserito non è valido...");
    else
    RESTO DEL PROGRAMMA


    In effetti questa soluzione funziona, però nel programma ci sono decine e decine di scanf, e mettere una struttura simile per ognuno dei tanti, renderebbe il codice illeggibile, oltre al richiedere molto tempo per la programmazione....

    Esiste qualche altro metodo valido per evitare il carh in situazioni come questa?

    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Usa una funzione e richiamala quando ti serve.

  3. #3
    Sono principiante in C, e le funzioni nn le so usare molto bene
    Mi faresti un esempio (che eviti il crash ovviamente) ???
    Thanks

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Beh ... in questo caso, diventa un po' difficile per te perche' bisognerebbe passare gli argomenti alla funzione, avere il valore di ritorno, utilizzare i puntatori ...

    Quello che ti suggerivo era di scrivere una funzione che accettasse come parametro il puntatore alla variabile da accettare, facesse quei controlli che hai indicato tu e restituisse il valore al chiamante ...

  5. #5
    La cosa più semplice che mi viene in mente è (come dice oregon) usare una funzione.
    In modo poco elegante potresti dichiarare una variabile globale (in modo che la funzione la veda e faccia il controllo)
    Esempio

    Codice PHP:
    #include <stdio.h>

    void controllo(void); //prototipo


    int res//varibile globale fuori dal main

    int main()
    {
     
      
    int numero;
        
      
    resscanf("%d",&numero);
      
    controllo();
      
      
    resscanf("%d",&numero);
      
    controllo();
      
      
    resscanf("%d",&numero);
      
    controllo();
      
      return 
    0;
    }


    void controllo(void
    {
      if (!
    res)  printf("Il tipo di dato inserito non è valido...");

    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Ho corretto il titolo in modo da conformarlo al regolamento.
    La prossima volta cerca di usare dei titoli più significativi.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Vi ringrazio tutti, ora provo...

  8. #8
    Originariamente inviato da bigmickey
    ...
    In modo poco elegante potresti dichiarare una variabile globale (in modo che la funzione la veda e faccia il controllo)
    ...
    Non mi pice per niente ( )

    Se devi creare una funzione, tanto vale crearne una che si occupi di tutto :

    codice:
    int GetIntValue( char *msg )
    {
    	int intVal;
    	printf("%s", msg);
    	while(!scanf("%d", &intVal))
    	{
    		while( getchar() != '\n');
    		printf("Il tipo di dato inserito non e' valido...\n%s",msg);
    	}
    	return intVal;
    }
    
    int main()
    {
    	int val, val2;
    	val = GetIntValue("Inserisci il valore 1 : ");
    	printf("Valore inserito = %d\n\n", val);
    	val2 = GetIntValue("Inserisci il valore 2 : ");
    	printf("Valore inserito = %d\n\n", val2);
    ...
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  9. #9
    ottima soluzione di Samuele_70
    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da donato.sciarra
    ottima soluzione di Samuele_70
    Era quello che volevo dire io, solo che ci volevo fare arrivare Lord_Blackout da solo ...

    Sono sempre convinto che dal copia-incolla si capisce soltanto che chi ha fornito la soluzione e' un programmatore e chi riceve il codice non ha imparato nulla ... ma e' solo una mia convinzione (e di pochi altri in questo forum, per la verita' ...)

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.