/ / Nom de fichier dans l'instruction fopen - c

Nom de fichier dans l'instruction fopen - c

Le programme demandera le nom du fichier.vous voulez ouvrir. Ensuite, le contenu sera affiché à l'écran. C'est ce que j'ai eu jusqu'à présent et je le sais mal. Celui que j'ai stocké dans la variable filename doit être celui de l'instruction fopen.

#include<stdio.h>

main()
{
FILE *fp;
char filename[20];
char c;

clrscr();

printf("ENTER FILE NAME: ");
scanf("%s",&filename);

while(!feof(fp))
{
fgetc(fp=fopen("filename","r"));

while(!feof(fp))
{
fscanf(fp,"%c",&c);
printf("%c",c);
}
}
fclose(fp);
getch();
}

Y at-il des méthodes / fonctions que celle que jestocké dans la variable nom de fichier sera dans l'instruction fopen? Je sais que quelque chose manque dans ce programme. Je vous serais reconnaissant de pouvoir m'aider dans ce domaine

Réponses:

1 pour la réponse № 1

Vous avez mis le nom de fichier entre guillemets pour qu’il recherche un fichier nommé filename et pas ce qui est dans votre variable de nom de fichier. Essayer:

fp=fopen(filename,"r");
fgetc(fp);

2 pour la réponse № 2

Tout d'abord, cette déclaration est fausse:

scanf("%s",&filename);

Ce que vous faites passe un char ** (techniquement, un char (*)[20]) à scanfmais vous voulez juste un char *afin que vous puissiez vous débarrasser de la &, ainsi:

scanf("%s", filename);

Notez aussi que scanf n'a aucun moyen de savoir quelle taille filename est (dans ce cas, seulement 20 caractères), donc si vousSi vous saisissez un nom de fichier trop volumineux, votre programme se bloquera (ou pire). De plus, s’il existe des espaces dans le nom du fichier, vous n’obtiendrez que la première partie du nom du fichier. Vous pouvez utiliser fgets ainsi:

fgets(filename, 20, stdin);

Sachez simplement que cela lira aussi une nouvelle ligne dans filename, vous devez donc utiliser strlen pour l'enlever.

Deuxièmement, l'expression fopen("filename","r") utilise la ficelle "filename" comme nom de fichier. Juste se débarrasser des guillemets pour utiliser la variable.

Aussi, vous appelez feof(fp) dans votre extérieur while boucle sans réellement initialiser fp. Ne faites pas ça. Au lieu de cela, vous devriez avoir fp = fopen(...) être dans un endroit séparé if déclaration pour s’assurer qu’il s’ouvre correctement:

if (fp = fopen(...))
{
// TODO: read file here
}
else
{
// file could not be opened properly!
}

Enfin, vous n'affectez jamais la valeur de retour de fgetc à votre variable locale c (qui, soit dit en passant, doit être un int distinguer EOF d'autres personnages).


0 pour la réponse № 3
#include <stdio.h>

int main(void){
FILE *fp;
char filename[20];
int c;

clrscr();

printf("ENTER FILE NAME: ");
scanf("%19s", filename);//You cannot use spaces in the file name.
if(fp=fopen(filename,"r")){
while(EOF!=(c=fgetc(fp))){
printf("%c", c);
}
fclose(fp);
}
getch();
return 0;
}