Problema programmi in c

Pivot1
Ciao ragazzi.

Ho scritto alcuni programmini ci C e li ho inseriti nel computer per vedere se funzionavano. Il fatto è che il computer non mi da neanche il tempo di visualizzarli! Come posso fare? Il codice sorgente è scritto bene, stando al compilatore! Ecco alcuni esempi:

#include

main()
{ int a, b, q, termina, area;

printf("premere q per terminare\n");

printf("inserisci lato a:");
scanf("%d", &a);
printf("inserisci lato b:");
scanf("%d", &b);

if(a==b)
printf("è un quadrato di area:", area = a*b);
else
printf("è un rettangolo di area:", area = a*b);

return 0;

}

*******************************************

#include
#define NUM_INTERI 10

void main(void)
{
int i = 0, numero = 0, somma = 0;

for( i = 1; i <= NUM_INTERI; i++){
printf(“inserire l'intero n. %d: ”, i);
scanf(“%d”, &numero);
if ( !(i & 1) )
somma += numero;
}

printf(“La somma vale: %d\n”, somma);
}


***********************************************


#include

main()
{ int a;

for(a=0; a<=100; a++);
printf("%d", &a);

}


Grazie a tutti.

Risposte
Cheguevilla
Chiedigli un input fittizio.
Tipo "scanf("%f", &x)" prima di return 0.

_luca.barletta
ai tempi usavo sempre getch();

_Tipper
Se usi windows puoi inserire come ultima istruzione (prima di return 0;)

system("PAUSE");

Nidhogg
"Tipper":
Se usi windows puoi inserire come ultima istruzione (prima di return 0;)

system("PAUSE");


Aggiungo che ovviamente questa scelta è molto maccheronica...molto meglio scrivere un caro e vecchio ciclo di controllo...


Saluti, Ermanno.

Pivot1
ma col break non dovrebbe uscire da solo?

cmq. osservando anche altri sorgenti ho incontrato queste espressioni:

if ( !(i & 1) )

for( ; ; )

che cosa significano!

Nidhogg
L'istruzione break interrompe il normale flusso di controllo. Causa l'uscita dal ciclo più interno che la contiene oppure da un'istruzione switch.

if(!(i&1)): i&1 essendo & un operatore binario logico bit a bit effettua l'and fra i e 1. Il punto esclamativo ! davanti all'and rappresenta l'operatore di negazione logica. E' un operatore unario e se applicato ad un'espressione che ha valore zero, restituisce il valore 1 di tipo int. Se l'espressione assme valore diverso da zero allora la sua negazione restituisce il valore 0 di tipo int.

for( ; ; ) rappresenta un ciclo infinito.

Pivot1
Ti ringrazio moltissimo. E nell'istruzione

for ( ; numero > 0; fattoriale *= numero);

il punto e virgola all'inizio del corpo del for che sta a significare!

Nidhogg
"Pivot":
Ti ringrazio moltissimo. E nell'istruzione

for ( ; numero > 0; fattoriale *= numero);

il punto e virgola all'inizio del corpo del for che sta a significare!


In generale la sintassi dell'istruzione for è: for(expr1 ; expr2 ; expr3) statement. Omettendo expr1 non viene effettuato il passo di inizializzazione del ciclo for.


Saluti, Ermanno.

simo_83
Ti do un consiglio: programma su Linux se usi il C...

dei software che eseguivano parsing su documenti scritti in un certo linguaggio, andavano in segm fault su Win e giravano su Linux.

Ho detto tutto.

:D

ciamiz
@ simo_83

No, non hai detto proprio niente, che significa che facendo il parsing di documenti scritti in un certo linguaggio si andava in segmentation fault su Win e non su Linux?

Il C è uguale per tutti, se il codice è errato, lo è anche su Linux...

Ciao!

david_e1
Il Visual C++, molto usato sotto Windows, non rispetta gli standard ISO del C++, anche se, con le versioni piu' recenti, la cosa credo sia migliorata, quindi un programma corretto potrebbe risultare in un eseguibile mal funzionante.

simo_83
"david_e":
Il Visual C++, molto usato sotto Windows, non rispetta gli standard ISO del C++, anche se, con le versioni piu' recenti, la cosa credo sia migliorata, quindi un programma corretto potrebbe risultare in un eseguibile mal funzionante.


Eh già... forse non mi sono espresso bene sul tipo di lavoro che doveva fare il programma in questione. Semplicemente doveva fare il parsing di un documento xml identificando i vari tag e creare l'albero sintattico. Su linux tutto ok, su win andava in segm fault. Inoltre con Dev C++ non sono mai riuscito a far partire il debugger e da lì ho deciso di buttarlo!!! :D

@ciamiz

E' vero che programmi corretti funzionano su entrambe le piattaforme, chiaro che se scrivo un programmino che stampa il massimo di una sequenza di interi... bè mi aspetto che funzioni pure su win 3.1 :P

Ho notato cmq che i problemi arrivano quando si tocca la memoria manualmente con i puntatori: lì con win succedono veri e propri casini, ma di più non so... anche perchè non ho mai sviluppato sw in C sotto windows e appunto nn so mai riuscito a fa un debugging!!

Saluti

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.