Problema programmi in c
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.
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
Chiedigli un input fittizio.
Tipo "scanf("%f", &x)" prima di return 0.
Tipo "scanf("%f", &x)" prima di return 0.
ai tempi usavo sempre getch();
Se usi windows puoi inserire come ultima istruzione (prima di return 0;)
system("PAUSE");
"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.
ma col break non dovrebbe uscire da solo?
cmq. osservando anche altri sorgenti ho incontrato queste espressioni:
if ( !(i & 1) )
for( ; ; )
che cosa significano!
cmq. osservando anche altri sorgenti ho incontrato queste espressioni:
if ( !(i & 1) )
for( ; ; )
che cosa significano!
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.
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.
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!
for ( ; numero > 0; fattoriale *= numero);
il punto e virgola all'inizio del corpo del for che sta a significare!
"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.
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.
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.

@ 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!
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!
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.
"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!!!

@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

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