Visualizzazione Stampabile
-
Programmare in C++
Vorrei capire una cosa.
Guardate questo programma (per calcolare il massimo e il minimo tra n numeri inseriti dll'utente):
Citazione:
#include <stdio.h>
#include <iostream>
int main () {
char fine;
int val, max=-val, min=val;
printf("Inserire i numeri da confrontare e premere q per terminare.\n");
do {
scanf("%d", &val);
if (val>=max) max=val;
if (val<=min) min=val;
scanf("%c", &fine);
}while(fine!='q');
printf("Massimo: %d\n", max);
printf("Minino: %d\n", min);
system ("pause");
return 0;
}
Perchè se utilizzo i float al posto degli int il programma preimposta come 1° minimo il valore 0 anziche il valore val?
Seconda domanda: così com'è quotato il programma funziona. Ma non dovrebbe esserci una \n all'interno della seconda scanf che legge il carattere fine?
Eppure se la inserisco il programma è errato. Boh...
Spero qualcuno sappia rispondermi. :)
-
Penso che il backslash n si usi solamente all'interno di stringhe. Per andare a capo prova con l'end line.
-
mi spiace. a scuola uso dei comandi un pò diversi <_<
-
1) non ho capito bene la domanda ovvero, non ho capito se con la frase utilizzare i float intendi riscrivere il programma interamente oppure inserire dei numeri con la virgola senza modificare il programma. Nel primo caso dovrebbe funzionare,ma stai attento a non cambiare solo la dicitura int in float perchè devi anche modificare i parametri delle funzioni printf e scanf. Ovvero devi scrivere così:
Citazione:
#include <stdio.h>
#include <iostream>
int main () {
char fine;
float val, max=-val, min=val;
printf("Inserire i numeri da confrontare e premere q per terminare.\n");
do {
scanf("%f", &val);
if (val>=max) max=val;
if (val<=min) min=val;
scanf("%c", &fine);
}while(fine!='q');
printf("Massimo: %f\n", max);
printf("Minino: %f\n", min);
system ("pause");
return 0;
}
Nel secondo caso invece siccome accetti solo interi puoi avere problemi quando provi ad inserire numeri decimali.
2) No, forse non hai ben chiaro come funzioni la funzione scanf. Il suo prototipo è int scanf ( const char * formato, &variabile)
Il primo argomento è il tipo di dato che si vuole leggere dalla tastiera. Nel tuo caso "%d" per gli interi o "%f" per i float. Il secondo membro è l'indirizzo della variabile in cui vuoi "salvare" il carattere letto dalla tastiera. Quindi scrivi &fine.
PS: Comunque questo è C e non C++ ;)
-
Citazione:
Originariamente Scritto da
Darkito
PS: Comunque questo è C e non C++ ;)
ah ecco. ora si spiega :sisi: io in c non so ancora programmare
-
Per la tua prima domanda, semplicemente in queste stringa:
if (val>=max) max=val;
if (val<=min) min=val;
se tu inserisci un float non riesce a fare un confronto in modo giusto.
Precisamente non riesce a confrontare ad esempio se 7.00=7.00, per una questione di approssimazione. Proprio per questo bisogna sempre evitare i confronti con i numeri float.
Per la seconda, semplicemente \n si usa al massimo nella printf, non nella scanf.:sisi:
-
Citazione:
Originariamente Scritto da
Smallman_647
Per la tua prima domanda, semplicemente in queste stringa:
if (val>=max) max=val;
if (val<=min) min=val;
se tu inserisci un float non riesce a fare un confronto in modo giusto.
Precisamente non riesce a confrontare ad esempio se 7.00=7.00, per una questione di approssimazione. Proprio per questo bisogna sempre evitare i confronti con i numeri float.
Per la seconda, semplicemente \n si usa al massimo nella printf, non nella scanf.:sisi:
In realtà quella riga di codice non da alcun problema in questo caso specifico,dato che l'operazione di maggiore o minore sui float funziona perfettamente. L'unica operazione che non si riesce a fare perfettamente con i float sono le operazione di uguaglianza del tipo:
Citazione:
float prova=7.8;
if(prova==7.8)
printf("Confronto riuscito!");
else
printf("Confronto non riuscito!")
L'output de codice di sopra sarà sempre "Confronto non riuscito", per via delle varie approssimazioni che avvengono dopo la virgola.
-
Intanto è sbagliato non inizializzare le variabili. Il programma sostanzialmente sembra che funzionai perchè i valori che spara dentro le variabili all'inizio sono altissimi (a me 4200240). Se provi a dare come input 9999999 il programma produce come massimo 9999999 e minimo 4200240, anche se io non l'ho digitato.
Per quanto riguarda le float il discorso parte da qua: tu non inizializzi le variabili, ed è il programma che da come valore iniziale 0.000000.
Per quanto riguarda \n dentro la scanf, non serve a niente. \n è semplicemente un carattere di 'a capo' quando stampi a schermo, non ha alcuna influenza sulla scanf.
-
Citazione:
Originariamente Scritto da
Naked
Intanto è sbagliato non inizializzare le variabili. Il programma sostanzialmente sembra che funzionai perchè i valori che spara dentro le variabili all'inizio sono altissimi (a me 4200240). Se provi a dare come input 9999999 il programma produce come massimo 9999999 e minimo 4200240, anche se io non l'ho digitato.
Per quanto riguarda le float il discorso parte da qua: tu non inizializzi le variabili, ed è il programma che da come valore iniziale 0.000000.
Per quanto riguarda \n dentro la scanf, non serve a niente. \n è semplicemente un carattere di 'a capo' quando stampi a schermo, non ha alcuna influenza sulla scanf.
Il valore di default varia da compilatore a compilatore.Però l'esempio dovrebbe funzionare senza problemi perchè mette in max un valore negativo mentre in min un valore positivo e finchè si inseriscono entrambi i numeri non si hanno problemi. Per essere più preciso ed evitare errori il codice dovrebbe essere così:
Citazione:
#include <stdio.h>
#include <iostream>
int main () {
char fine;
int val=0, max=0, min=0;
printf("Inserire i numeri da confrontare e premere q per terminare.\n");
scanf("%d", &val);
max=val;
min=val;
do {
if (val>=max) max=val;
if (val<=min) min=val;
scanf("%d",&val);
scanf("%c", &fine);
}while(fine!='q');
printf("Massimo: %d\n", max);
printf("Minino: %d\n", min);
system ("pause");
return 0;
}
-
Ma non usate java a scuola??