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

    [C] Primo post su forum!

    Allora, questo è il mio primo post sul forum quindi se commetto qualche errore non mangiatemi
    Il mio problema è il seguente:
    da qualche giorno ho iniziato a leggere un po' di C e ieri ho cercato di creare il mio primo programmino. Niente di che, dovrebbe servire a fare una semplice addizione a 2 addendi.
    Questo è il codice:

    codice:
    #include <stdio.h>
    #include <math.h>
    main()
    {
       unsigned int a,b,c;
       printf("Inserisci primo addendo",a);
       scanf("%f",a);
       printf("inserisci secondo addendo",b);
       scanf("%f",b);
       c= a+b;
       printf("il risultato è",c);
    }
    Quando compilo non mi da nessun errore, quando lo eseguo mi fa scrivere un numero e poi mi esce la finestra di errore di windows 7 e mi dice "progetto 1 ha smesso di funzionare" o simile.......che cosa ho sbagliato??
    Grazie in anticipo per le risposte

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

    Moderazione

    Non ti mangio, ma ti invito a prendere visione del Regolamento interno.

    I titoli devono dare l'idea del contenuto della discussione
    Il codice va postato indentato e all'interno degli appositi tag CODE (punto 6).

    Correggo io.


    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

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    E' un classico errore quando si è alle prime armi e si usa la scanf.
    Il segmentation fault avviene quando si tenta di accedere ad una zona di memoria non allocata,la scanf prende in ingresso l' indirizzo della variabile su cui scrivere il valore.
    Se vuoi scrivere un valore preso da input (da stdin) su c,devi scrivere:
    codice:
    scanf("%f",&c);
    &c indica l' indirizzo di memoria di c,se tu scrivi soltanto c non sai a quale indirizzo di memoria stai accedendo.

  4. #4
    ciao, intanto grazie per la risposta anche se non ho capito proprio tutto: allora io ho aggiunto la stringa che hai scritto tu. Fatto questo mi appare lo stesso errore. Dopo che scrivo il primo addendo il programma si chiude con la finestra di windows che dice che ha smesso di funzionare. Potresti postare tutto il codice corretto per favore?

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    #include <stdio.h>
    #include <math.h>
    main()
    {
       unsigned int a,b,c;
       printf("Inserisci primo addendo",a);
       scanf("%f",&a);
       printf("inserisci secondo addendo",b);
       scanf("%f",&b);
       c= a+b;
       printf("il risultato è",c);
    }
    EDIT: compilandolo mi sono accorto che c'erano anche altri errori.
    Innanzitutto quel %f pensavo fosse intenzionale,ma quello che stai facendo è di leggere valori interi come fossero float.
    La sintassi corretta è %d per leggere o scrivere un int.Poi hai dimenticato il %d nella printf.E comunque la e accentata quando programmi non usarla,da risultati inattesi.Piuttosto di è scrivi e'.
    Ecco il codice completo corretto,che compilato con gcc dava molti avvisi:
    codice:
    #include <stdio.h>
    #include <math.h>
    main()
    {
       unsigned int a,b,c;
       printf("Inserisci primo addendo",a);
       scanf("%d",&a);
       printf("inserisci secondo addendo",b);
       scanf("%d",&b);
       c= a+b;
       printf("il risultato e'%d\n",c);
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    A parte la modifica che ti segnalava ramy, devi anche modificare il codice di formato delle scanf... %f serve per i float, per gli unsigned int si usa %u. Inoltre, nella printf() alla fine va specificato un ulteriore codice di formato per la stampa del risultato.

    codice:
    #include <stdio.h>
    #include <math.h>
    
    main()
    {
       unsigned int a,b,c;
       printf("Inserisci primo addendo");
       scanf("%u",&a);
       printf("inserisci secondo addendo");
       scanf("%u",&b);
       c= a+b;
       printf("il risultato è %u",c);
    }
    EDIT: ora che rileggo non c'è nemmeno bisogno di quei parametri a e b nelle printf intermedie... rivediti bene la questione dei codici di formato nelle operazioni di stampa e lettura.
    every day above ground is a good one

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    A cosa ti serve includere math.h? Inoltre manca il valore di ritorno del main:

    codice:
    #include <stdio.h>
    
    int main() {
       unsigned int a,b,c;
       
       printf("Inserisci primo addendo: ");
       scanf("%u", &a);
       printf("Inserisci secondo addendo: ");
       scanf("%u", &b);
       
       c = a + b;
       
       printf("Il risultato e\' %u\n", c);
    
       return 0;
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Allora, ho fatto tutto quello che mi avete detto, però quando lo eseguo, immetto i primi 2 addendi e poi, quando premo invio dopo aver inserito il 2° addendo il programma si chiude senza darmi nessun risultato o valore. Perchè?? Grazie per le risposte comunque

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Miggianox
    Allora, ho fatto tutto quello che mi avete detto, però quando lo eseguo, immetto i primi 2 addendi e poi, quando premo invio dopo aver inserito il 2° addendo il programma si chiude senza darmi nessun risultato o valore. Perchè?? Grazie per le risposte comunque
    Stai usando un IDE, vero? Lascia perdere per ora: compila ed esegui da terminale.

    Eventualmente metti uno "stop" alla fine del main, in modo da evitare la chiusura della finestra. Fai una ricerca qui nel forum, se n'è parlato fino alla nausea.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    Ciao, ehm scusa l' ignoranza ma cosa è un IDE? eseguire dal terminale vuol dire cliccare su "run"? Il discorso degli stop l' avevo sentito, ma come si scrive in modo sintatticamente corretto? Ho cercato "IDE C" sul forum ma non mi è apparso nulla di ciò...se mi potessi dare qualche link così al massimo mi informo....Grazie comunque

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.