Vai al contenuto

Dubbi su programmazione C


Messaggi raccomandati

Buon giorno a tutti.

Mi sto esercitando scrivendo programmini basilari in C per dare un esame dopodomani, e per verificare il funzionamento di While e Do-while ho compilato un programmino imbarazzante, proprio per mettere in luce delle discrepanze tra il codice scritto e l'effettivo funzionamento dell'eseguibile...

 

Il codice sorgente è semplicemente questo:

#include <stdio.h>

int main()
{
    int var=0;
    
    while (var!=5)
    {
    printf("riprova");
    scanf ("%d\n",&var);
    }
    return 0;
}

 

Penso che vi offenderei se mi metto a scrivere anche quello che dovrebbe fare... comunque una volta eseguito ottengo questo:

riprova4
3
riprova2
riprova6
riprova8
riprova213
riprova5
riprova1

 

Come potete vedere il programma non si arresta appena riceve il valore 5, ma si ferma alla iterazione successiva. Inoltre nella seconda riga il programma "si dimentica" di eseguire printf()....

Ho provato con Xcode e con Clang, e i risultati sono identici... e non riesco a capire come mai...

Qualche idea?

 

Questo dubbio è nato mentre facevo gli esercizi di compiti passati, tra i quali uno chiede:

"Si definisca una funzione c che riceve da tastiera valori interi fino a quando la somma degli ultimi due valori inseriti eÌ€ divisibile per il terzultimo valore inserito."

 

e la relativa soluzione proposta dalla prof è la seguente:

void trap(){
     int third_last, second_last, last;
     scanf("%d", &second_last);
     scanf("%d", &last);
     do{
         third_last=second_last;
         second_last=last;
         scanf("%d", &last);
     }while((last+second_last)%third_last==0);
}

 

La soluzione in per se è ok, se non per la guardia dell'iterazione do-while, che per quanto ne sapevo se risulta vera l'esecuzione del programma ritorna a "do", mentre se è falsa il controllo viene passato alla istruzione successiva, che qua non c'è, quindi termina il programma.

In questo caso, al contrario, se la guardia risulta falsa, il programma termina e la condizione dell'esercizio non è verificata... quindi qualcosa non mi torna... Ma il problema è che è gia il terzo esercizio che trovo con lo stesso errore...

Se potete chiarire anche questo mio dubbio vi sarei infinitamente grato.

MacBook Pro 8,2 13,3" | 8 GB DDR3 1600 MHz; SSD OWC Mercury Pro 6G

Link al commento
Condividi su altri siti

Ora spiegami perché hai messo l'escape \n in uno scanf  :ghghgh: toglilo, ti "sporca" l'input

 MacBook 7.1 - SanDisk Extreme 120GB SSD - 8GB RAM - OSX Mavericks -  iPhone 5S 32GB -  iPad 4 16GB
[.          ] Patience left: 5%

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...