Intervalle C++

Résolu/Fermé
Tarik - 12 sept. 2021 à 18:36
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 17 sept. 2021 à 16:22
Bonjour,
comment fait-on pour obliger l'utilisateur du programme à choisir un entier entre 0 et 20 qui represente une note d'un éleve? Je ne trouve pas d'info sur internet et j'ai essayé:
int note<20 & note >0;
mais ça ne marche pas.
Merci d'avance.



Configuration: Windows / Chrome 92.0.4515.159

6 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 13 sept. 2021 à 09:15
Bonjour,

avec un test if peut-être ?

if(note >= 0 && note <= 20)

tu ne connais pas les base de C++ à ce que je vois ...
0
Bonjour,
Merci je vais essayer ça.
et non je ne connais pas encore les bases du C++, c'est peut etre pour ça que je demande de l'aide, excuse moi de débuter ...
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
13 sept. 2021 à 13:03
Bah, on a tous débuté ...

Par contre il y a surement de bons tutos sur le Net pour acquérir les bases, par exemple:

https://openclassrooms.com/fr/courses/1894236-programmez-avec-le-langage-c
0
mais je connaissais le if juste je n'y avais pas pensé dans cette situation pcq je pensais qu'il fallait mettre l'intervalle en même temps de définir l'entier.
mais merci pour le lien je vais aller voir.
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 13 sept. 2021 à 14:51
int permet de déclarer une variable entière

int note;

if(note >= 0 && note <= 20)
{
    //on fait un truc 
}
else
{
    // sinon, on fait autre chose
}
0
mais on sait par expérience qu'une note sur 20 est souvent un flottant.
opter pour un :

double note;


dans le typage de la variable aurait donc plus de sens
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
14 sept. 2021 à 09:25
Bonjour,

Bah int ou float, le plus important est que Tarik apprenne les bases du langage, voire même les principes de la programmation dans un langage en général

(Je me demande si j'aurais débuté avec C++, d'ailleurs ...)
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 17 sept. 2021 à 16:24
Bonjour,

Traditionnellement on utilise une boucle
do ... while
pour demander une valeur devant vérifier une certaine contrainte, et on répète la boucle si la valeur saisie est non conforme.

Note que la note doit être déclarée au préalable, et que la déclaration du type ne permet pas de spécifier une borne inférieure ou supérieure pour la note. C'est simplement parce que pour C++, (et n'importe quel langage d'ailleurs) un double / float / int occupent une place prédéterminée, indépendamment des contraintes que tu veux lui imposer. Ce sont donc deux aspects indépendants et qui n'interviennent pas sur la même instruction.

Contrairement à ce qui a été proposé par arscy, utiliser un
double
est surdimensionné (8 octets = 64bits), un
float
(4 octets = 32 bits) prendra moins de place et est suffisamment précis dans ce cas d'usage. Les
double
s sont utilisés uniquement pour des calculs qui requièrent une grande précision. En vrai on pourrait faire d'ailleurs beaucoup mieux qu'un
float
, mais passons.

Pour demander une valeur à l'utilisateur en C++, on utilise traditionnellement le flux
std::cin
.

Ensuite l'opérateur
&
est le ET bit à bit (donc qui permet de combiner deux masques). Il ne doit pas être confondu avec l'opérateur logique qui se note
&&
en C++.

Voici une manière simple d'écrire le programme :

#include <iostream>

int main(){
    using namespace std;

    unsigned note;
    do {
        cout << "Saisir une note entre 0 et 20 : ";
        cin >> note;
    } while (note < 0 || note > 20);
    cout << "Note saisie : " << note << endl;

    return 0;
}


Cependant ce n'est pas suffisant (par exemple si l'utilisateur saisit "éé", le C++ va considérer que la note saisie est 0). Pour régler le problème, on peut contrôler que le flux est correct, et si ça n'est pas le cas, nettoyer
std::cin
comme expliqué ici (sans quoi on va déclencher une boucle infinie) :

#include <iostream>
#include <limits>

int main(){
    using namespace std;

    unsigned note;
    do {
        cout << "Saisir une note entre 0 et 20 : ";
        cin >> note;

        if (cin.fail()) {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            note = -1;
        }
    } while (note < 0 || note > 20);
    cout << "Note saisie : " << note << endl;

    return 0;
}


Bonne chance
0