Newbbo: errore su codice

di il
15 risposte

Newbbo: errore su codice

Da poco mi sto interessando della programmazione in linguaccio C e mi affascina molto ma la tecnicità dei libri ti fa a volte incasinare e quindi chiedo consiglio a voi..

Sto cercando di fare un programma semplicissimo di somma... e il compilatore miracle c mi da errore.... questo è il codice.

#include <stdio.h>
#include <conio.h>
#include <dos.h>

int somma, numero, n;

main()

{
clrscr();
printf(" SOMMA DEI NUMERI IMMESSI\n");
printf("\n iMMETTERE LO 0 (ZERO) PER TERMINARE\n");
printf("\n***************************************\n");

numero=1;
somma=0;
n=-1;

while(numero!=0)
{
printf("\nscrivi un numero intero: ");
scanf("%d", &numero);
somma=somma+numero;
n=n+1;
}

printf("\n\nla somma dei %d", n);
printf("numeri scritti è: %d\n", somma);

getch()
}


-----------------------------

l'errore che mi dà è questo:

Miracle C Compiler (r3.2), written by bts.
line 1: #include stdio.h ignored--file not found.
line 2: #include conio.h ignored--file not found.
line 3: #include dos.h ignored--file not found.
Compiling c:\documents and settings\wellcome\desktop\somma.c
main

c:\documents and settings\wellcome\desktop\somma.c: line 27: wrong # args in function call
'printf("\n\nla somma dei %d", n)'
aborting compile


scusate l'ignoranza ma avrei bisogno di aiuto.

15 Risposte

  • Re: Newbbo: errore su codice

    Il compilatore che usi non ha tutti gli header del C standard (tra l'altro del dos.h e conio.h non ne parla neanche il mio manuale di C che segue lo standard ANSI, infatti se poi vedi nel codice sotto ho usato la funzione system per eseguire il comando dos cls).
    Ritornando al compilatore che usi, per quanto riguarda le caratteristiche proprie del DOS, non sono presenti i file header dos.h e bios, ma un file system.h con le più note funzioni (int86, inp/inpw, outp/outpw, clrscr, gotoxy, bios_clock, bios_serial, kbhit, getch, getche) e le funzioni della libreria C sono implementate nel file ccl.lib.

    Per questo ti da quei problemi sui file header, inoltre avresti poi anche un errore alla fine perché non hai messo il ";" dopo getch().

    Ti consiglierei di utilizzare un altro ambiente di sviluppo che utilizza il compilatore gcc (molto più conforme allo ANSI C usato sia su windows che su unix), che si chiama Dev-C++ e lo puoi scaricare a questo link:

    http://www.bloodshed.net/devcpp.htm

    Comunque ho provato il tuo programma con il gcc e con qualche piccola modifica (come puoi vedere sotto) funziona.
    Se invece vuoi continuare ad usare miracle, prova a togliere la include di conio.h e dos.h e fai quella di system.h; inoltre togli anche la include di stdio.h, il compilatore dovrebbe in automatico usare il file ccl.lib per le funzioni della libreria c
    #include <stdio.h>
    
    int somma, numero, n;
    
    main()
    {
    system("cls");
    printf(" SOMMA DEI NUMERI IMMESSI\n");
    printf("\n iMMETTERE LO 0 (ZERO) PER TERMINARE\n");
    printf("\n***************************************\n");
    
    numero=1;
    somma=0;
    n=-1;
    
    while(numero!=0)
    {
    printf("\nscrivi un numero intero: ");
    scanf("%d", &numero);
    somma=somma+numero;
    n=n+1;
    }
    
    printf("\n\nla somma dei %d ", n);
    printf("numeri scritti e': %d\n", somma);
    
    getch();
    } 
  • Re: Newbbo: errore su codice

    Grazie mille smanettone!
    Era da un pò che cercavo un compilatore come si deve ma mi hanno detto che il turbo c per esempio (che è un classico), con windows xp non funziona bene. Questo sembra ottimo e funzionale. Come ottima è stata la tua risposta, trasparente e lucida!

    Grazie dell'aiuto, a buon rendere!
  • Re: Newbbo: errore su codice

    Di niente, se hai bisogno chiedi pure

    Ciao
  • Re: Newbbo: errore su codice



    non volevo aprire un nuovo post quindi scrivo qui un dubbio che mi viene su una cosa.

    finito e migliorato il programma di prima mettendoci anche se il risultato che viene è paro o disparo comincio un nuovo programma ma la mia newbbezza mi precede

    Cercando di fare un gioco di ruolo in c vorrei far inizializzare il gioco premendo un tasto qualsiasi della tastiera ma mi rendo conto che non sò vagamente come si faccia

    1)cioè per far dire che ne sò: se il giocatore preme "a" fai verificare questa cosa che io ho impostato.

    2)o per far dire: qualsiasi tasto prema il giocatore si avvia una cosa che io ho impostato.

    Sò che è una cavolata ma mi sto documentando gia da qualche ora e sto diventando stupido!
  • Re: Newbbo: errore su codice

    Usando la getch() il programma rimane in attesa che venga scritto un carattere sul prompt dei comandi; una volta che tu scrivi qualcosa la getch restituisce il carattere da te inserito, così puoi testare cos'è e a seconda del valore fai ciò che è oppurtuno, cioè

    char c;

    ....

    c = getch();
    if(c=='a){
    ....
    }
    else if(c=='b'){

    ...
    }
    ...
    e cosi via

    Altre cose che mi sono venute in mente consisterebbero nell'utilizzo di gestori di eventi, cioè procedure da eseguire al verificarsi di un determinato evento, ma in C non ho la minima idea di come si faccia
  • Re: Newbbo: errore su codice

    Sto provando a usare lo switch ora. però lo sto usando per quanto riguarda le scelte multiple da dare al giokatore che si mette davanti al pc a giocare... sto cercando di capire cm funge il getchar()...

    ora provo come mi hai dtt tu per l'inizio invece che ne pensi?
  • Re: Newbbo: errore su codice

    Allora questo è un abbozzo (disordinato) di quello che sto cercando di creare... vorrei ordinarlo ma è tutto il pomeriggio che programmo e è ora che vado a dormire, ma prima di andare devo finire questo nn c'è verso ke lo lasci incompleto! Puoi aiutarmi?

    #include <stdio.h>
    #include <math.h>
    #include <dos.h>
    char q;
    int a,b,c,var,s;

    main()
    {
    system("cls");
    printf("Gioco di ruolo fatto in c");
    printf("premi s per cominciare il gioco!");

    q=getch();
    s=printf("Sei in città, nella piazza principale con il sole alto nel cielo. Sei accasciato a terra in un vicolo senza sapere perchè. Cosa fai?");
    a=printf("mi faccio un giro osservando che negozi e persone incontro");
    b=printf("cerco di rendermi conto del mio stato, equipaggiamento");
    c=printf("rimango stesso a riposarmi);
    getchar();
    switch(var){
    case'a':printf("%d" &a);
    break;
    case'b':printf("%d" &b);
    break;
    case'c':printf("%d" &c);
    break;}
    getch();
    }


    Dopo la presentazione di "sei in citta e bla bla bla" il giokatore deve vedere comparire sullo schermo le 3 opzioni che può scegliere e scrivendone la lettera corrispondente il computer gli sottoporrà la conseguenza a quella scelta, ovviamente preimpostata da me. ... Lo sò che il codice è impostato in disordine e nn funzionante però dimmi se come idea può prendere corpo... dammi qualche dritta.
  • Re: Newbbo: errore su codice

    Dammi solo consigli e dritte nn farmi il programma tu voglio farmelo io, magari dimmi al massimo se ho sbagliato l'ordine nel codice...
  • Re: Newbbo: errore su codice

    Come idea non è male, usando la getch o la getchar questo è l'unico modo per eseguire determinate cose a seconda di cosa scelga l'utente.

    Ti ricordo solo che con la getch, ti viene preso direttamente il carattere inserito appena questo è digitato, mentre con la getchar il carattere ti viene restituito dopo che premi invio.
    Tra l'altro se scrivi più caratteri e dai invio, questi finiscono in un buffer, dal quale li puoi leggere uno alla volta eseguendo la getchar; per leggerli tutti basta fare un ciclo fino a quando la getchar non ti restituisce EOF
  • Re: Newbbo: errore su codice

    Rieccomi qua.. grazie smanettone per avermi dato una delucidazione sul getch/getchar ora che lo ho provato in entrambi i casi ho capito come funziona.
    Il problema è che mi sto rincojonendo davanti qst pc a cercare di fare una cosa: Vorrei fare una cosa stupidissima che dica al pc: se l'utente preme s+invio fai acacdere questa condizione che io ho programmato altrimenti fanne accadere un'altra programmata. non ci riesco cacchio!!!

    Puoi aiutarmi? sto diventando pazzo!
  • Re: Newbbo: errore su codice

    Usa la getchar, se tu premi s + invio, lei ti restituisce 's', se hai premuto qualcos'altro + invio ti restituisce quello che hai premuto, se hai premuto più cose + invio: facendo un while su getchar avrai che fai più cicli invece di 1.
  • Re: Newbbo: errore su codice

    Si quello lo avevo già sperimentato, quello che chiedevo io era questo:

    Camminando cammianndo arrivi in città che fai?
    a: canto
    b:ballo

    if l'utente preme a printf("cantando incuriosisci i passanti che cominciano a riunirsi intorno a te")
    if l'utente preme b printf("ballando la gente si scansa per paura che sei in preda ad un attacco di convulsioni")


    Io pensavo di strutturare il codice cosi: per le due opzioni a e b impostare uno switch, due if per le conseguenze della premuta di a o di b.
    ma non sò come impostare il codice con la giusta sintassi! ne ho provate in diversi modi ma nada.


    p.s.: volevo chiederti anke se studiando il c riesco a imparare meglio il c#...
  • Re: Newbbo: errore su codice

    Potresti strutturarlo in questo modo:

    Camminando cammianndo arrivi in città che fai?
    a: canto
    b:ballo

    di seguito ti metto il codice per gestire la scelta:
    char scelta;
    
    scelta = getchar();
    
    switch(scelta){
       case 'a':printf("cantando incuriosisci i passanti che cominciano a riunirsi intorno a te");
       break;
       case'b':printf("ballando la gente si scansa per paura che sei in preda ad un attacco di convulsioni");
       break;
    }
    così non va bene? dovrebbe andare no?

    Riguardo al C#, è sicuramente molto più comodo del C, anche se è un linguaggio ad oggetti, di solito per imparare a programmare bene bisogna prima farsi un po' le ossa con linguaggi imperativi (come il C) e poi passare alla programmazione ad oggetti, anche se potresti usare il c# alla C così da provare sempre la programmazione imperativa, ma sarebbe un uso molto innaturale del linguaggio.

    Altra cosa che ti posso dire è che il c# è di proprietà della Microsoft ed è molto simile al Java; inoltre puoi anche scaricarti gratuitamente l'ambiente di sviluppo della Microsoft, versione Express Edition direttamente dal suo sito a questo link:

    http://www.microsoft.com/italy/msdn/prodotti/vs2005/editions/stdexp.mspx#ENB

    vedi te, cosa preferisci
  • Re: Newbbo: errore su codice

    Dunque qst giorni ho provato vari tipi di codice e non sono riuscito a combinare granchè.
    Ho messo il printf("Camminando cammianndo arrivi in città che fai?
    a: canto
    b:ballo "); iniziale in modo che l'utente poteva sapere che c'era una scelta,
    ho chiuso il getch(); finale e mi hanno anke suggerito di mettere le variabili nella main() ma nn sò se è mejo o meno quindi chiedo a te.

    nn mi dà le cariabili a seconda se premo a o b nn mi da niente nulla... lol mi sa che sbaglio io a capirti..
    se puoi delucidarmi grazie della cortesia cmq!
Devi accedere o registrarti per scrivere nel forum
15 risposte