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; }
5 Réponses :
Si vous souhaitez lire la saisie de l'utilisateur à partir d'une invite, vous utiliseriez la fonction plutôt que simplement taper p> et attendre être invité. Donc, commencez par supprimer le scanf () code>. Pour analyser les paramètres de ligne de commande, vous les saisirez à la ligne de commande, comme dans:
myfilename code> serait dans le tableau code> argv code> lorsque votre programme démarre. P>
printf ("Entrez le nom du fichier: ") code> invite. Le nom de fichier serait dans
argv [1] code> en supposant que vous avez entré en tant que premier paramètre après
myProgram code> sur votre ligne de commande. P> p>
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" );
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);
Ah! Vous aviez raison, je les mélangeais. Bravo d'avoir effacé cela!
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 . P>
#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; }
+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".