PDA

View Full Version : [C] Mi viene visualizzato l'errore di windows all'avvio dell'eseguibile


-hide-
18-10-2008, 14:02
Ciao ragazzi!
Nel voler esercitarmi sull'istruzione while e switch, case ho voluto creare un programma che mi permettesse, schiacciato un tasto, di accedere all'operazione matematica che desideravo.
Fin qui l'idea mi sembra fattibile e pure il codice da scrivere molto semplice, solo che all'avvio dell'eseguibile appena inizia il ciclo while mi parte l'errore di windows, lo script che mi dice "invia" o "non inviare" per intenderci, e si chiude il tutto.

Posto di seguito il sorgente...potreste dirmi dove commetto errori, perché il compilatore non me ne da ed io non riesco a trovarli :D



#include <stdio.h>

main ()
{
char operazione;
int n1, n2, somma, diff;
printf ("Digita i tasti indicati per selezionare un'operazione\n\t");
printf ("- Addizione ---> a\n\t");
printf ("- Sottrazione ---> s\n\t");
printf ("- Moltiplicazione ---> m\n\t");
printf ("- Divisione ---> d\n\t");
printf (" Exit ---> x\n\n");
printf ("Digita qui di seguito: ");
scanf ("%c", operazione);
while (operazione != 'x')
{
switch (operazione)
{
case 'a': // Inizia il blocco del'addizione
printf ("Hai selezionato l'addizione\n");
printf ("Inserisci il primo numero: \n");
scanf ("%d", n1);
printf ("Inserisci il secondo numero: \n");
scanf ("%d", n2);
somma = n1 + n2;
printf ("%d + %d = %d", n1, n2, somma);
break;
case 's': // Inizia il blocco della sottrazione
printf ("Hai selezionato la sottrazione\n");
printf ("Inserisci il primo numero: \n");
scanf ("%d", n1);
printf ("Inserisci il secondo numero: \n");
scanf ("%d", n2);
diff = n1 - n2;
printf ("%d + %d = %d", n1, n2, diff);
break;
}
}
}


Ovviamente non è terminato, ma era inutile che andavo avanti!

vincenzo83
18-10-2008, 14:21
Ciao, metti questo:

scanf ("%c", &operazione);

Se ricordo bene con scanf, si posso creare bei problemi; per leggere i caratteri ci sono altre funzioni più adatte. Aspetta qualche utente più esperto per conoscere i problemi di scanf (... legati al buffer che non vuole saperne di svuotarsi :D )

DanieleC88
18-10-2008, 14:25
Il primo problema visibile è quello dell'&... Altra osservazione: attento che così, fatta una prima scelta, ripeterai sempre la stessa operazione. ;)

-hide-
18-10-2008, 14:27
Codice:

scanf ("%c", &operazione);



tu hai perfettamente ragione ed io sono un perfetto idiota! :D


Altra osservazione: attento che così, fatta una prima scelta, ripeterai sempre la stessa operazione.

si ora ho notato anche questo. e come dovrei svilupparlo quindi?

-hide-
18-10-2008, 14:32
#include <stdio.h>

main ()
{
char operazione;
int n1, n2, somma, diff;
printf ("Digita i tasti indicati per selezionare un'operazione\n\t");
printf ("- Addizione ---> a\n\t");
printf ("- Sottrazione ---> s\n\t");
printf ("- Moltiplicazione ---> m\n\t");
printf ("- Divisione ---> d\n\t");
printf (" Exit ---> x\n\n");
while (operazione != 'x')
{
printf ("Digita qui di seguito: ");
scanf ("%c", &operazione);

switch (operazione)
{
case 'a': // Inizia il blocco del'addizione
printf ("\nHai selezionato l'addizione\n");
printf ("Inserisci il primo numero: ");
scanf ("%d", &n1);
printf ("Inserisci il secondo numero: ");
scanf ("%d", &n2);
somma = n1 + n2;
printf ("%d + %d = %d\n\n", n1, n2, somma);
break;
case 's': // Inizia il blocco della sottrazione
printf ("\nHai selezionato la sottrazione\n");
printf ("Inserisci il primo numero: ");
scanf ("%d", &n1);
printf ("Inserisci il secondo numero: ");
scanf ("%d", &n2);
diff = n1 - n2;
printf ("%d + %d = %d\n\n", n1, n2, diff);
break;
}
}
}

Ho risolto il problema che mi ha fatto osservare DanieleC88. Però in questo modo al riavvio del ciclo compare due volte "Digita qui di seguito:"

khelidan1980
18-10-2008, 14:49
edit ho postato senza leggere il codice :D

DanieleC88
18-10-2008, 15:07
Però in questo modo al riavvio del ciclo compare due volte "Digita qui di seguito:"
Tipicamente quando l'esecuzione del tuo programma dipende solo dall'input e non puoi sapere a priori che input riceverai né quando, fai un ciclo infinito e controlli l'intput:
while (1)
{
if (input() == ESCI) break;

/* ... altrimenti ... */
}
:)

royaleagle
20-10-2008, 11:43
Ho risolto il problema che mi ha fatto osservare DanieleC88. Però in questo modo al riavvio del ciclo compare due volte "Digita qui di seguito:"
Il solito problema dello scanf(), se proprio vuoi usare quella funzione allora puoi inserire PRIMA di ogni successiva chiamata a scanf():
while (getchar() != '\n');
altrimenti ti rimane l'invio nel buffer.

-hide-
20-10-2008, 20:16
Ti ringrazio :D :D