7 votes

Blocs de code redirigeant les entrées et les sorties

Je suis nouveau dans les blocs de code, et je n'arrive pas à le faire fonctionner avec des arguments de ligne de commande de < entrée > sortie. Quelqu'un sait-il comment faire ?

Je suis actuellement capable de lire un fichier transmis par argv[1] mais le programme ne lit pas automatiquement l'entrée du fichier donné et ne dirige pas non plus la sortie vers la sortie du fichier.

Je suis conscient que c'est sur les arguments du programme, ma ligne d'arguments est : list.txt < input > output

Après quelques recherches, j'ai vu un gars le faire comme ceci : < ./input > ./output, cela ressemble à l'exécution d'un programme pour donner l'entrée et la sortie, quoi qu'il en soit, j'ai également essayé cela sans succès. Dois-je utiliser des gestionnaires de fichiers pour interagir avec lui ? Cela n'a pas de sens, le simple getchar() devrait lire à partir du fichier d'entrée passant.

Qu'est-ce que je rate ici ?

Merci d'avance

7voto

Aleš Koblížek Points 801

J'ai trouvé un moyen de le faire dans CB 13.12.

Tools -> Configure Tools -> Add:

Name: whatever
Executable: C:\Windows\System32\cmd.exe
Parameters: /C ${TARGET_OUTPUT_BASENAME} exampleArg1 <inputFileRedirect.txt
Working Directory: ${TARGET_OUTPUT_DIR}

Il lance la console Windows et passe Paramètres à ce dernier. Vous pouvez également attribuer des raccourcis clavier à ces outils. Le seul inconvénient que je vois est que les outils ne sont pas spécifiques à un projet.

5voto

user2678713 Points 51

Je travaille avec Code::Blocks depuis un certain temps maintenant et j'ai récemment constaté le même problème, du moins avec Code::Blocks 12.11 sous Windows. Les redirections > y < ne travaillent pas dans le Projet -> Définir les programmes des arguments...

Une solution astucieuse consiste à effectuer l'exécution dans une étape post-construction.

Clic droit project name -> Build options... -> Pre/post build steps -> Post-build steps:

cmd /C cd /D "bin\$(TARGET_NAME)\" & YourApplicationNameHere.exe >output.txt 2>errors.txt

Et cochez la case Toujours exécuter, même si la cible est à jour. Maintenant, cliquez sur Ctrl+F9 et le programme est exécuté en tant que dernière étape du processus de construction.

1voto

Jehan Yoon Points 11

Je pense que c'est le problème de cb_console_runner.exe qui lance votre programme dans IDE . ConsoleRunner ne peut pas interpréter le symbole de redirection. Donc, j'ai ajouté un peu de code au code original de codeblocks 13.12. Veuillez copier le fichier lié dans le [dossier cb]. (N'oubliez pas de sauvegarder l'original).

binaire : http://limity.tistory.com/attachment/cfile30.uf@241A8D485621595131B28F.exe

code source : http://limity.tistory.com/attachment/cfile23.uf@231AF3485621595232A632.cpp

1voto

codefreak Points 1949

J'ai pu faire rediriger les entrées vers mon programme c en définissant les arguments du programme dans le menu du projet.

Naviguez vers Top Menu>Project>Set programs' arguments et mettre </absolute/path/to/yourinputfile avis < au début, il trompe les codeblocks en redirigeant le fichier au lieu de passer l'argument.

enter image description here

1voto

Star Wolf Points 61

Je sais que c'est un vieux sujet, mais aucune des solutions proposées n'est suffisante. Pour Windows, j'opterais probablement pour la définition de la macro suivante (car vous pouvez en avoir besoin également pour l'impression de débogage ou autre) à l'échelle globale

#include <cstdio>
#ifdef DEBUG
    #define D(X) X
#else
    #define D(X)
#endif

Ensuite, comme première ou deuxième ligne (si vous avez besoin de std::ios::sync_with_stdio(false) ; ) dans main, utilisez-le comme suit

int main() {
   D(freopen("input.txt","r",stdin);)
   D(freopen("ouput.txt","w",stdout);)
   ...

Et définir dans Code::Blocks sous Projects > Build Options... > (Debug, Compiler Settings, #defines)

DEBUG

Je m'attends à ce que "input.txt" soit le fichier texte d'entrée dans le dossier où se trouvent les autres fichiers .c ou .cpp, et à ce que "output.txt" soit le fichier de sortie généré dans le même dossier (ou ils peuvent être tous deux ajoutés au projet en tant que tels pour faciliter l'édition/la visualisation).

Cette solution fonctionnera à la fois avec cin/cout et scanf/printf.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X