Erreur sur une fonction permettant à l'utilisateur d'entrer un nombre

bonsoir
Je me suis lancé dans un TP à réaliser pour apprendre à programmer en switch : réaliser une mini calculette.
J’ai trouvé cette fonction qui devrait permettre à un utilisateur d’entrer un nombre.
Je la teste sur le PlayGround d’Xcode mais elle me renvoie un message d’erreur que je ne comprends pas.
J’imagine qu’il s’agit d’un problème de variable vide et donc d’optionnel…

Une aide serait la bienvenue.

merci

Effectivement, le problème est que ta variable est vide et donc, l’optionel renvoie nil.
Par conséquent vue que tu demande un Int et qu’il reçoit une valeur nulle ton application plante.

Pour éviter ce genre de problème, il faudrais que tu vérifie ton optionnel avec un “if let”.
Pour comprendre cette méthode je te renvoie vers le cours de Maxime sur les optionnels.

Pour le input dans le playground je crois qu’il fonctionne que sur le version pour iPad mais, pas celle de Xcode donc, il faut que tu rentre une valeur dans la variable directement dans ton code.

3 « J'aime »

En effet, il est impossible de faire des saisies dans un Playground car ils ne sont pas interactifs.
Dans le cours sur les bases de la programmation j’ai ajouté une archive zip contenant un projet XCode pour faire des applications console. Tu peux le télécharger directement sur http://www.purplegiraffe.fr/courses/141920/lectures/2687657

1 « J'aime »

Merci pour vos réponses mais je suis toujours bloqué…

J’ai le code suivant qui devrait fonctionner avec le zip de Max, mais non, rien ne se passe, je n’ai pas d’invite dans la console pour entrer une frappe au clavier et je n’ai pas de warning ou de message d’erreur…
Il faut bien coder dans le fichier main.swift ?

// Fonction permettant de demander à l’utilisateur d’entrer un nombre et de le convertir en entier
func input() -> Int {
let strData = readLine();

return Int(strData!)!

}

// Déclaration des variables utiles pour le TP
var nombre1: Int
var nombre2: Int
var operateur: Int // Comprendra un nombre correspondant au menu (par exemple 1 pour une Addition)
var resultat: Int

// On boucle tant que l’utilisateur n’a pas rentré un nombre compris entre 1 et 5
repeat {
// On affiche tout d’abord le menu
print("— Menu —")
print(“1. Addition”)
print(“2. Soustraction”)
print(“3. Multiplication”)
print(“4. Division”)
print(“5. Modulo”)
print("")

// On demande à l'utilisateur ce qu'il souhaite
print("Que voulez-vous ? (de 1 à 5) ")
operateur = input()
print("") // Permet de réaliser un saut de ligne

// Pour réaliser l'opération, il est nécessaire d'avoir entré un nombre qui correspond au menu
if (operateur > 0 && operateur < 6) {
    // L'utilisateur rentre le premier nombre
    print("Entrez le premier nombre : ")
    nombre1 = input()
    
    // L'utilisateur rentre le deuxième nombre
    print("Entrez le deuxième nombre : ")
    nombre2 = input()
    
    switch operateur {
    case 1: // Addtion
        resultat = nombre1 + nombre2
        
    case 2: // Soustraction
        resultat = nombre1 - nombre2
        
    case 3: // Multiplication
        resultat = nombre1 * nombre2
        
    case 4: // Division
        resultat = nombre1 / nombre2
        
    case 5: // Modulo
        resultat = nombre1 % nombre2
        
    default:
        resultat = 0 // On ne devrait pas entrer dans ce cas normalement, mais si jamais, on indique à 0 le résultat.
        print("Une erreur est survenue.")
    }
    
    // Enfin, on affiche le résultat
    print("")
    print("Le résultat de l'opération est : \(resultat)")
    print("")
}

} while (operateur < 1 || operateur > 5)`

Normalement, il fonctionne correctement. il faut juste cliquer dans la console et appuyer sur la touche entre pour valider ta saisie.
Au début, il affiche des nombre ensuite, si tu appuis sur entre il t’affiche “Hello World” et enfin, il te demande de saisir un nombre.

Pour ta question de ou mettre ton code c’est bien dans le fichier main.swift par contre, si tu à fait attention dans le fichier “main” il y a une boucle “for” dans celle-ci, il y a un “printf” qui utilise la classe math qui est dans le fichier Math.swift (tu peut mettre ce for en commentaire si, il te derange).

Ensuite, tu à 3 morceau de code qui commence par une constante (let) et juste la ligne en dessous de ces constante, il assigne une valeur qui est la saisi utilisateur (Utilisateur.saisirTexte(), Utilisateur.saisirEntier(), Utilisateur.saisirReel()) donc, comme tu peut le voir c’est une class et different function de cette class qui est utiliser. (Cette class est dans le fichier Utilisateur.swift)

je te conseil de ne pas modifier les fonctionne de cette class car, il y a déjà celle que tu a besoin.
Donc, il te reste juste à modifier ton code dans le main avec une de ses fonction et ça devrais fonctionner.

Si, tu trouve pas je te donnerai la réponse plus tard, si tu la demande :wink:

2 « J'aime »

Si je reprends la console de Maxime sans rien modifier, sans mon code, rien ne s’affiche ; je ne peux rien saisir, ni chiffres ni lettres dans la console

Il faut que tu lance l’application en cliquant sur le bouton play en haut à gauche

Ok, j’avance… je peux me mettre dans le code maintenant et revoir les optionnels

Merci beaucoup pour votre patience :+1: