-
CréateurSujet
-
octobre 22, 2024 à 8:32 pm #42925BotParticipant
Question pour le langage C :
ça, c’est la sortie. Mon code :
Pourquoi il me sort 2 chiffres interminables pour la denrière entrée ? Pour x et y ?lement@asus-vivobook:~/Bureau/Informatique/Programmation/C/Programmes$ ./MainExe 78 45 x = 78 | y = 45 lement@asus-vivobook:~/Bureau/Informatique/Programmation/C/Programmes$ ./MainExe 78 45 x = 78 | y = 45 lement@asus-vivobook:~/Bureau/Informatique/Programmation/C/Programmes$ ./MainExe gh x = 32618 | y = -132166960
#inlude int main(void) { int x, y; sanf("%d %d", &x, &y); printf("x = %d | y = %dn", x, y); return 0; }
——————–
ciboulette_of_space – Envoyé depuis le Discord : Culte du code -
CréateurSujet
-
AuteurRéponses
-
-
octobre 22, 2024 à 8:50 pm #42926
Bonjour,
La fonction `scanf` retourne un entier, vous pourriez vérifier sa valeur avant des les afficher afin de s’assurer qu’elle a fonctionné correctement.——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
octobre 22, 2024 à 9:07 pm #42927
Vous pourriez vérifier l’ensemble des fonctions qui retourne un code d’erreur, c’est une bonne pratique.
Pour cela, entrez la commande `man ` dans votre terminal afin d’ouvrir le manuel (la documentation) de la fonction.
Vous pouvez également retrouver le manuel sur le web, par exemple:
https://man7.org/linux/man-pages/man3/scanf.3.html#RETURN_VALUE
https://man7.org/linux/man-pages/man3/printf.3.html#RETURN_VALUE——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
octobre 22, 2024 à 9:10 pm #42928
ALors, apparemment quand on affiche ça, il retourne un chiffre presque au hasard, ce qui est actuellement en mémoir
——————–
ciboulette_of_space – Envoyé depuis le Discord : Culte du code -
octobre 22, 2024 à 9:11 pm #42929
car il ne reconnait pas le charactère dans un int
——————–
ciboulette_of_space – Envoyé depuis le Discord : Culte du code -
octobre 22, 2024 à 9:11 pm #42930
Vous pourriez également apprendre à utiliser un debugger pour mieux comprendre ce qu’il se passe, notamment les valeurs qui semblent aléatoires mais qui viennent en fait des variables non-initialisé et qui dépendent de la valeur présente dans votre RAM au moment de l’affichage.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
octobre 22, 2024 à 9:11 pm #42931
D’accord, merci des conseils
——————–
ciboulette_of_space – Envoyé depuis le Discord : Culte du code -
octobre 22, 2024 à 9:13 pm #42932
Je vous recommande éventuellement le livre suivant: https://man7.org/tlpi/.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
octobre 22, 2024 à 9:13 pm #42933
The Linux Programming Interface de Michael Kerrisk.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
octobre 22, 2024 à 9:40 pm #42934
Merci 👍
——————–
ciboulette_of_space – Envoyé depuis le Discord : Culte du code -
octobre 23, 2024 à 1:23 am #42943
si t’as ecris « gh » a la troisieme entree c’est parce que scanf a pas detecte de charactere numeric du coup il envoie un eof, c’est quelque chose que t’es sence detecter quand t’apelle la fonction scanf t’as toute les valeurs de retour dans le man.
si tu utilise un appel system -> tu le protege -> comment le protege ? man fonction il explique tout les types d’erreurs
——————–
azer0768 – Envoyé depuis le Discord : Culte du code -
octobre 23, 2024 à 9:18 am #42944
D’accord merci, mais c’est quoi un eof ?
——————–
ciboulette_of_space – Envoyé depuis le Discord : Culte du code -
octobre 23, 2024 à 1:16 pm #42946
Bonjour,
L’acronyme EOF signifie End-Of-File, c’est le code qui est retourné pour indiquer que la fin du fichier a été atteinte.
Le système GNU/Linux utilise des fichiers appelés TTY (TeleTYpe) pour gérer le terminal (concept de: « tout est un fichier » sous GNU/Linux), ces fichiers permettant de gérer le terminal se trouve dans: `/dev/tty`.
Ce qui signifie que lorsque l’on utilise des fonctions qui permettent de lire sur un terminal (scanf, get…) cela fonctionne comme si on lisait un fichier et un EOF peut être généré de la même manière. Vous pourriez également appuyer sur la touche `CTRL+D` afin de générer manuellement un EOF (peut être utile pour terminer une boucle de lecture avec `scanf` sans terminer le programme, par exemple).——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
octobre 23, 2024 à 1:23 pm #42947
Lorsqu’un processus sous Linux se lance, 3 flux de fichier vont être crées (3 identifiants appelés `file descriptor` permettant de gérer le terminal).
L’identifiant 0 est utilisé pour lire les entrées utilisateurs du terminal (celui utilisé par `scanf`, par exemple).
L’identifiant 1 est utilisé comme sortie utilisateur, pour afficher du texte dans le terminal (celui utilisé par `printf`, par exemple).
L’identifiant 2 est utilisé comme sortie d’erreur, pour afficher du texte dans le terminal (utile pour appliquer des filtres et n’afficher que les erreurs sans afficher la sortie utilisateur, par exemple).——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
octobre 23, 2024 à 1:25 pm #42948
Concernant le système Windows, celui-ci fonctionne par API plutôt que par fichier mais le principe du EOF a été conservé pour garantir une compatibilité avec les standards du langage C.
——————–
badwolf1337 – Envoyé depuis le Discord : Culte du code -
octobre 23, 2024 à 2:15 pm #42949
D’accord je comprends, merci beaucoup c’est plus clair. Et super mise en forme 😅
——————–
ciboulette_of_space – Envoyé depuis le Discord : Culte du code
-
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.
Sujets récents
-
Creation d’un jeux video en 2d isometrique
par Bot
il y a 3 heures et 37 minutes
-
Explication de la sortie d’un programme C ?
par Bot
il y a 9 secondes
-
Bonjour je suis nouveau et je souhaite apprendre la cybersecuriter
par Bot
il y a 20 heures et 13 minutes
-
Apprendre l’OS-Dev
par Bot
il y a 1 jour et 23 heures
-
HP Probook (Desktop) – defaut
par Bot
il y a 14 heures et 23 minutes
Réponses récentes
Statistiques des Forums
- Comptes enregistrés
- 2 575
- Forums
- 51
- Sujets
- 889
- Réponses
- 16 427
- Mot-clés du sujet
- 0