Pourquoi Read ferme le programme VB.Net [Résolu]

Hixale 219 Messages postés samedi 25 février 2017Date d'inscription 16 septembre 2017 Dernière intervention - 1 mars 2017 à 16:59 - Dernière réponse : vb95 1442 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 7 février 2018 Dernière intervention
- 3 mars 2017 à 10:33
Module Module1 

Sub Main() 

Dim Variable As Integer 
Dim Variable2 As Integer 

Variable = Console.Read 
Variable2 = Console.Read 

Console.WriteLine(Variable & "+" & Variable2 & "=" & Variable + Variable2) 


Console.Read() 

End Sub 

End Module 



Quand je laisse Read et que je tape 7 et que j'appui sur entré ça ferme le programme

si je met ReadLine et que je tape 7 le programme s’exécute normalement

Pourquoi?
Afficher la suite 

18 réponses

Répondre au sujet
vb95 1442 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 7 février 2018 Dernière intervention - 1 mars 2017 à 17:48
0
Utile
2
bonjour
Pour apprendre VB net je te conseille ce cours : http://plasserre.developpez.com/cours/vb-net/
Hixale 219 Messages postés samedi 25 février 2017Date d'inscription 16 septembre 2017 Dernière intervention - 1 mars 2017 à 18:20
j'en ai pour 30 ans pour apprendre tout ça lol
vb95 1442 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 7 février 2018 Dernière intervention > Hixale 219 Messages postés samedi 25 février 2017Date d'inscription 16 septembre 2017 Dernière intervention - 1 mars 2017 à 18:44
Il n'est pas question de tout apprendre : il suffit d'avoir de bonnes bases solides et de savoir ensuite aborder une spécificité du langage dont on a besoin
Par analogie tu ne connais pas toute la langue française par cœur mais tu peux suivre une discussion et écrire une lettre . Par contre si tu tombes sur le mot "ACULEIFORME" tu cherches dans un dictionnaire ou sur Google sa signification .
En programmation c'est pareil
Autre chose les termes "bonjour" et "merci" sont appréciés lors des messages
Commenter la réponse de vb95
Whismeril 11026 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 février 2018 Dernière intervention - 1 mars 2017 à 18:06
0
Utile
10
Bonjour

Henry te l'a expliqué en long et en large ici
http://www.commentcamarche.net/forum/affich-34394845-difference-entre-read-et-readline-vb-net

Read ne ferme pas le programme, il attend que tu appuies sur une touche, n'importe laquelle.
Et comme tu n'as plus aucune instruction après, le programme se termine.

Whismeril 11026 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 février 2018 Dernière intervention - 1 mars 2017 à 21:39
Ha je n'avais pas compris que ton problème vient des 2 premiers Read.

Tout d'abord, il vaut mieux écrire
Variable = Console.Read()
Variable2 = Console.Read()


Ton problème vient du fait que tu n'as toujours pas compris ce que fait Read, il lit un caractère autrement dit une touche:
  • Variable reçoit 7
  • Variable2 reçoit "Entrée", ben oui c'est une touche.


et ensuite tu veux afficher tes variables
Console.WriteLine(Variable & "+" & Variable2 & "=" & Variable + Variable2) 

Or console.writeline ne sait pas ajouter 7 et "Entrée", donc ton programme ne s’arrête pas il plante.

Si tu mets
Variable = Console.ReadLine()
Variable2 = Console.ReadLine()


ReadLine attend une ligne entière, donc une saisie qui se termine par Entrée. Il sait que Entrée veut dire "fin de ligne" et donc il ne le transmet pas à la variable.
Si tu tapes 7 Entrée 5 Entrée
  • Variable reçoit 7
  • Variable2 reçoit 5

et là console.writeline sait l'écrire.


@VB95
Bonsoir

les cours "académiques" commencent toujours (ou presque) par du mode console, tu apprends les bases, à te servir des types, des classes, des événements, la gestion d'erreur etc...
Ensuite on passe au mode graphique, ainsi les bases sont déjà acquise, par exemple quand on clique sur un bouton, la notion d'abonnement à un événement est déjà connue.
Beaucoup de questions de débutants autodidacte (j'en ai fait partie) viennent du fait qu'un certain nombre des choses, faites pour nous pas Visual Studio, n'est pas compris.
Après ce genre de cours nécessitent aussi d'être bien expliqués, je ne connais pas celui de VB.Net sur openclassroom, mais je sais que celui en C# n'est pas très clair.
vb95 1442 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 7 février 2018 Dernière intervention > Whismeril 11026 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 février 2018 Dernière intervention - 2 mars 2017 à 00:11
Merci Whismeril pour ces éclaircissements !
Me mode Console et moi ça fait deux : je ne m'en sers jamais !
Hixale 219 Messages postés samedi 25 février 2017Date d'inscription 16 septembre 2017 Dernière intervention > Whismeril 11026 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 février 2018 Dernière intervention - 2 mars 2017 à 20:49
Salut enfin quelqu'un qui à compris merci ! tiens le cours sur openclassrooms :

https://openclassrooms.com/courses/apprenez-a-programmer-en-vb-net/modifications-des-variables-et-operations-sur-les-variables

c'est à la ligne "Lire une valeur en console" dis moi si tu comprend direct ou si tu trouve aussi que c'est mal expliqué

à la fin tu dis

"et donc il ne le transmet pas à la variable.
Si tu tapes 7 Entrée 5 Entrée"

Tu voulais plutôt dire "et donc il le transmet à la variable.
Si tu tapes 7 Entrée 5 Entrée" ??
Whismeril 11026 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 février 2018 Dernière intervention > Hixale 219 Messages postés samedi 25 février 2017Date d'inscription 16 septembre 2017 Dernière intervention - 2 mars 2017 à 22:08
enfin quelqu'un qui à compris
, enfin ce que tu écris n'est pas très explicite.
Si je t'avais pas dit qu'il n'y a pas d'instruction après, donc ça s'arrête, jamais tu n'aurais expliqué que ça plante plus haut.

Tu voulais plutôt dire "et donc il le transmet à la variable.

Non non, il faut lire les phrases entières...
Il sait que Entrée veut dire "fin de ligne" et donc il ne le transmet pas à la variable

Readline transmet 7 et pas 7 "Entrée", alors que Read transmet la touche que tu tapes, quelle qu'elle soit.

Quand au cours, oui je le comprends, mais ça n'est pas une référence, car toutes ces notions sont acquises depuis longtemps pour moi. Note au passage, qu'il est écrit
Je vais immédiatement aborder ce passage, mais assez sommairement puisqu'il ne sera valable qu'en mode console.
Sur le fond il a raison, des programmes en mode console, on n'en fait jamais (à part dans un cours de débutant).
Sur la forme, ben il ne détaille pas et donc tu n'as pas compris, cependant il est aussi écrit
il vous faut utiliser la fonction ReadLine()
, certes y'a pas la raison, mais je pense que le message est clair, avec Read ça ne marchera pas.

En plus en soit, c'est plutôt bien présenté, mais le hic avec un cours papier ou site internet est qu'il n'y a pas d'échanges entre le prof et l'élève, qu'en plus un "vrai" prof en dira toujours plus que ce qui est écrit sur le support.
Enfin sur les n personnes à avoir lu ce cours, une majorité ne va pas se poser la question => Il faut OK, d'autres vont comprendre, soit ils ont su lire entre les lignes soit ils ont déjà des notions, enfin quelques uns vont se dire pourquoi? Et puis il y aura un autre chapitre qui te paraitra évident alors qu'il posera des problèmes à un autre.
Il ne peut pas y avoir de cours parfait.
Et on n'a pas encore inventé mieux que 30 étudiants avec un prof.


Sur l'autre fil, NHenry n'a pas compris ton problème (pas plus que moi, je suivais le fil et franchement je ne comprenais ce que tu ne comprenais), mais il t'a quand même donné beaucoup d'éléments qui auraient pu amener ta réflexion sur la bonne voie. Et comme ça ne venait pas, tu aurais pu dire que jamais tu ne voyais s’afficher "7*3 = 21"

Peut être que dans le cours, sur le chapitre sur les types (que j'ai lu en diagonal), s'il y avait décrit ce qu'est un caractère, tu n'aurais pas eu de problèmes.
Alors un caractère c'est tout ce que tu peux taper avec ton clavier,
  • donc tout ce qui "se voit":
    • les chiffres
    • les lettres
    • les signes
  • mais aussi ce qui ne se voit pas:
    • Entrée qui sous windows envoie deux caractères la fin de ligne et le retour chariot
    • flèche dans un sens ou l'autre
    • suppr
    • backspace
    • plein d'autres trucs invisibles

Il existe aussi des caractères que l'on ne peut pas taper (début/fin de texte, fin de transmission etc...).

Les caractères ASCII sont décrits ici

ReadLine lit une chaine de caractère (string) donc plusieurs caractères les un à la suite des autres.
Read lit un caractère, tu peux essayer backspace et suppr ça va planter pareil.
Et en plus tu rentres ça dans un integer sans te poser de questions (c'est comme ça dans le cours OK, mais NHenry t'a expliqué que ça n'est pas comme qu'il faut faire).


Donc voilà, le cours n'est pas parfait, nous non plus, et la description de ton problème non plus...
En plus nous sommes tous bénévoles, et quand on a l'impression que l'autre ne fait pas d’efforts (ce qui est parfois vraiment le cas), et bien on finit par passer à autre chose, car on donne de notre temps libre pour ce forum mais on ne veut pas le gâcher.





Si ton problème est résolu, marque le sujet comme tel, en cliquant sur le lien dédié sous le titre de la discussion.
vb95 1442 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 7 février 2018 Dernière intervention > Hixale 219 Messages postés samedi 25 février 2017Date d'inscription 16 septembre 2017 Dernière intervention - 2 mars 2017 à 22:23
bonsoir
Quand tu sauras faire le différence entre Console.Read() et Cosole.ReadLine() tu auras tout compris !
Dans ton code tout en haut

Dim Variable As Integer
Dim Variable2 As Integer
Variable = Console.Read
Variable2 = Console.Read
Console.WriteLine(Variable & "+" & Variable2 & "=" & Variable + Variable2)


Variable contient la touche tapée ( imaginons 7)
Si pour la seconde touche tu tapes Entrée Variable2 contient Entrée
Comment veux-tu additionner le 7 numérique avec Entrée : le programme plante

Dans l"exemple de
https://openclassrooms.com/courses/apprenez-a-programmer-en-vb-net/modifications-des-variables-et-operations-sur-les-variables
A la rubrique "Ligne une valeur en console" c'est Console.ReadLine qui est utilisé
Console.ReadLine attend que tu tapes au clavier un certain nombre de touches jusqu'à que tu tapes Entrée
Si tu tapes 7 2 5 Entrée
Variable = Console.ReadLine() 
sera égale à 725

Pour résumer Console.Read lit une seule touche du clavier alors que Console.ReadLine lit une succession de touches jusqu'à ce que l'on tape Entrée ( ou lit une ligne car une ligne se termine par Entrée)

Pour moi le cours est pas trop mal expliqué

J'espère que cela va être clair pour toi

Dans le réponse de Whismeril
"et donc il ne le transmet pas à la variable.
Si tu tapes 7 Entrée 5 Entrée

il veut dire que la touche Entrée n'est pas transmise à la variable : elle sert de Fin de ligne avec console.ReadLine

Si tu mets

Variable = Console.ReadLine()
Variable2 = Console.ReadLine()

et tu tu tapes 7 Entrée 5 Entrée comme au-dessus
Variable = 7 ( le premier Entrée est la fin de ligne)
Variable2 = 5 ( le second Entrée est la fin de ligne)

Si tu tapes 7 5 2 Entrée 5 6 9 Entrée par exemple
Variable = 752 ( le premier Entrée est la fin de ligne)
Variable2 = 569 ( le second Entrée est la fin de ligne)
Commenter la réponse de Whismeril
Hixale 219 Messages postés samedi 25 février 2017Date d'inscription 16 septembre 2017 Dernière intervention - 2 mars 2017 à 23:35
0
Utile
3
OK merci. du coup avec Read quand je tape par exemple 7 il le met directement dans la Variable sans qu'on est besoin d'appuyer sur entrée ? il sert à pas grand chose dans ce cas Read puisque qu'on ne peux additionné ou autre , à part appuyer sur entrée pour fermer le programme à la fin ?
vb95 1442 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 7 février 2018 Dernière intervention - 3 mars 2017 à 00:37
A quoi sert Console.Read ?
A taper une seule touche et à savoir laquelle si nécessaire
Un exemple simple :

Module Module1

Sub Main()

Dim Variable As Integer
Dim Variable2 As Integer

Variable = Console.ReadLine() ' entre le premier nombre
Variable2 = Console.ReadLine() ' entre le second nombre
Console.WriteLine("Variable + & Variable2 = " & Variable + Variable2) ' affiche l'addition
Console.Read() ' Attend que tu frappes une touche sinon tu ne verrais rien

End Sub

End Module


Et ce n'est pas sa seule utilisation : il est capable de savoir quelle touche a été frappé et c'est ça l'important
Prends en exemple les 4 flèches dans un jeu où tu diriges un personnage sur le plateau de jeu ( ce n'est plus du mode Console mais à la base c'est les mêmes instructions qui sont exécutées )

Regarde cet exemple simple qui affiche "Salut" dans la console
Si tu enlèves Console.Read() le programme se termine directement
Si tu le laisses tu dois taper une touche pour que le programme se termine



Module Module1
Sub Main()
Console.Write("Salut")
Console.Read()
End Sub
End Module
Hixale 219 Messages postés samedi 25 février 2017Date d'inscription 16 septembre 2017 Dernière intervention > vb95 1442 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 7 février 2018 Dernière intervention - 3 mars 2017 à 01:42
je voulais juste montrer l'exemple avec mon code pour dire qu'il servait juste a appuyer sur entrée pour terminer le programme, après comme tu dis il peut servir pour les 4 flèches ou par exemple peut-être la touche supprimé , après je sais pas si c'est la même fonction mais bon :)
vb95 1442 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 7 février 2018 Dernière intervention > Hixale 219 Messages postés samedi 25 février 2017Date d'inscription 16 septembre 2017 Dernière intervention - 3 mars 2017 à 10:33
Bonjour
Je pense que maintenant tu peux mettre le sujet comme Résolu
a + si besoin
Commenter la réponse de Hixale

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.