Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problème swift: readline #6

Open
AAA97AAA opened this issue Mar 11, 2017 · 2 comments
Open

Problème swift: readline #6

AAA97AAA opened this issue Mar 11, 2017 · 2 comments

Comments

@AAA97AAA
Copy link

AAA97AAA commented Mar 11, 2017

Bonjour,

Mon problème venait pour la fonction battle: Mon but était de proposer à l'utilisateur, les options de joueur disponible (avec un index: ex "1 pour Jean, 2 pour Paul,...").

La fonction readline() renvoie un String?.

Au début, je voulais faire un unwrapping avec Int(), mais comme Dimitri l'avait dit, cela ne fera que crée des erreurs selon les entrées des utilisateurs.

J'ai donc voulu faire l'inverse: pour l'entrée récupérer, je vérifie qu'il correspond à un String(i) pour lesquelles i correspond à toutes les valeurs dispo:

Cette fonction renvoie vraie si l'entree n'est pas valide faux si l'entree est valide
func entree_juste(entree : String?, nb: Int)-> Bool
for i in 1 ... nb {
var nombre_string = String(i)
if entree == nombre_string {
return false;
}
}
print("Votre entrée est invalide");
return true;

}
`

Cette fonction me permettrait de faire un repeat while tant que l'entrée utilisateur est erroné:

repeat { var entree_utilisateur = readLine() } while (entree_juste(entree: entree_utilisateur, nb: all_Trainer.count))

Cependant, j'ai un problème lors de la compilation: " error: use of unresolved identifier 'entree_utilisateur' "

Ce qui est normal, vu qu'il n'y a pas eu d'entrée pour l'instant.

Cette personne a eu le même problème mais une mise à jour de Xcode était suffisante, et sous GNULinux... (https://openclassrooms.com/forum/sujet/xcode-readline-issue?page=1#message-91428887)

Y'a t-il une solution?

Merci

@saucisson
Copy link

saucisson commented Mar 11, 2017

Le problème vient de la portée de la variable entree_utilisateur. Elle est définie à l'intérieur du repeat par var entree_utilisateur = ..., puis utilisée dans la condition while. Il semble que swift nécessite que la variable entree_utilisateur soit déclarée hors de la boucle pour qu'elle soit visible dans la condition.

Donc pour corriger le problème il suffit d'ajouter var entree_utilisateur : SonType avant le repeat.

@kyouko-taiga : Est-ce bien ça ? Dans ce cas, la portée des variables internes dans la condition serait un proposal à faire sur swift-evolution.

@AAA97AAA
Copy link
Author

Le problème est réglé après avoir appliqué ce que vous avez dit.

Merci! Bon week-end.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants