6
votes

Ouverture d'un fichier des arguments de ligne de commande en C

Je veux que mon programme C demande à l'utilisateur de saisir le nom du fichier qu'ils souhaitent ouvrir et imprimer le contenu de ce fichier à l'écran. Je travaille à partir du tutoriel C et j'ai le code suivant jusqu'à présent. Mais quand je l'exécute, cela ne me permet pas de saisir le nom du fichier. (Je reçois la touche "Appuyez sur n'importe quel bouton pour continuer", j'utilise codeblocks)

Qu'est-ce que je fais mal ici? P>

#include <stdio.h>

int main ( int argc, char *argv[] )
{
    printf("Enter the file name: \n");
    //scanf
    if ( argc != 2 ) /* argc should be 2 for correct execution */
    {
        /* We print argv[0] assuming it is the program name */
        printf( "usage: %s filename", argv[0] );
    }
    else
    {
        // We assume argv[1] is a filename to open
        FILE *file = fopen( argv[1], "r" );

        /* fopen returns 0, the NULL pointer, on failure */
        if ( file == 0 )
        {
            printf( "Could not open file\n" );
        }
        else
        {
            int x;
            /* Read one character at a time from file, stopping at EOF, which
               indicates the end of the file. Note that the idiom of "assign
               to a variable, check the value" used below works because
               the assignment statement evaluates to the value assigned. */
            while  ( ( x = fgetc( file ) ) != EOF )
            {
                printf( "%c", x );
            }
            fclose( file );
        }
    }
    return 0;
}


1 commentaires

+1. C'est comment poser une question sur les devoirs. "Je suis venu aussi loin et j'ai frappé un barrage routier" plutôt que "écrire ce programme pour moi".


5 Réponses :


4
votes

Si vous souhaitez lire la saisie de l'utilisateur à partir d'une invite, vous utiliseriez la fonction scanf () . Pour analyser les paramètres de ligne de commande, vous les saisirez à la ligne de commande, comme dans: xxx

plutôt que simplement taper xxx

et attendre être invité. myfilename serait dans le tableau argv lorsque votre programme démarre.

Donc, commencez par supprimer le printf ("Entrez le nom du fichier: ") invite. Le nom de fichier serait dans argv [1] en supposant que vous avez entré en tant que premier paramètre après myProgram sur votre ligne de commande.


0 commentaires

5
votes

Cela va lire de Stdin le nom de fichier. Peut-être que vous voulez seulement faire cela si le nom de fichier n'est pas fourni dans une partie de la ligne de commande.

int main ( int argc, char *argv[] ) 
{ 
    char filename[100];
    printf("Enter the file name: \n"); 
    scanf("%s", filename);

    ...
    FILE *file = fopen( filename, "r" );  


0 commentaires

4
votes

Vous mélangez des arguments de ligne de commande avec une entrée utilisateur.

Lorsque vous utilisez des arguments de ligne de commande, vous exécutez le programme et transmettez les arguments en même temps. Par exemple: P>

char str[50] = {0};
scanf("Enter file name:%s", str); 


1 commentaires

Ah! Vous aviez raison, je les mélangeais. Bravo d'avoir effacé cela!



2
votes

C'est parce que votre IDE ne transmet pas l'argument du nom de fichier à votre programme. Jetez un coup d'œil à ce Question sur Stackoverflow .


0 commentaires

0
votes
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[] )
{
    char filename[50];
    printf("Enter the Filename : ");
    scanf("%s",&filename);
    char line[50];
    FILE *fp = fopen( filename, "r");
   
    if (fp == NULL)
    {
        printf("File opening Unsuccessful\n");
        exit(1);
    }
    while (fgets(line , 30 , fp) != NULL)
    {
        strrev(line);
        printf(line);
    }
   fclose(fp) ;

   return 0;
}

0 commentaires