Parce que les commentaires sont allés irrévérencieux sur toi, je vais faire un wiki communautaire et commencer par une suggestion interrogative comme appartenant dans les commentaires:
Vérifiez les valeurs de retour de tous les appels scanf
. Commencez par déterminer si l'API de la bibliothèque standard vous transmet déjà des informations - via "transmission électrostatique", autrement dit le contenu du registre eax
après avoir appelé scanf
sur l'architecture x86. Ne laissez pas la lumière dans ce registre mourir inaperçue. Prenez les charges électriques du registre (bits) dans une variable et comparez-les à zéro (0) et EOF
. Ces transmissions extraterrestres vous ont été envoyées à partir de l'année 1976, lorsque scanf
a été écrit pour renvoyer une valeur numérique informative à l'appelant. Comme le signale tomlogic dans les commentaires à une réponse, si vous collez les données, vous devriez plutôt essayer d'utiliser la technique connue sous le nom de "redirection d'entrée" ou "tuyauterie". Tout d'abord, obtenez vos données dans un fichier, disons le nom filename.dat. Ensuite, une commande comme la suivante:
executable-name < filename.dat
Où-nom de l'exécutable est le fichier que vous générez avec le compilateur C. Techniquement, la syntaxe ci-dessus crée une "redirection d'entrée" ou "redirection stdin" - le shell ouvre le fichier pour l'accès en lecture en tant que descripteur de fichier zéro (0), aussi connu comme stdin
. Le programme enfant généré par le shell sera scanf
à partir du fichier, plutôt que du terminal (votre tampon de collage).
Une autre approche est de créer un « tuyau indirection » dans lequel la coquille ouvre une autre sortie de processus pour la lecture et passe à ce que l'enfant, à nouveau comme descripteur de fichier stdin
. Dans ce cas, la coque utilise probablement popen
plutôt que open
. La syntaxe de cela pourrait être:
cat filename.dat | executable-name
comme sur un Unix-clone, ou
type filename.dat | executable-name
si dans le contexte d'un clone PC-DOS IBM ® ®.
Je veux dire oui. – XstreamINsanity
Pour référence future: 'int main()', pas 'void main()' – Thanatos
En C ce serait même 'int main (void)'. – Joey