7
votes

Programme C simple ouverture d'un fichier

J'essaie de créer un programme pour ouvrir un fichier appelé "write.txt". XXX

Si cela fonctionne? Parce qu'il ne renvoie rien.


5 commentaires

Il ne renvoie rien parce que vous avez un retour 0; comme dernière déclaration? Ou voulez-vous dire que fopen () retourne zéro?


Qu'attendez-vous que cela retourne? Que voulez-vous dire par retour, imprimé?


Désolé, je veux dire Fopen ne renvoie rien.


Il ne peut pas "ne rien retourner". Qu'est-ce qu'il retourne exactement dans votre cas?


Pardon. J'ai mangé mes mots. Je voulais dire qu'un fichier n'est pas créé ou ouvert.


4 Réponses :


2
votes

Qu'attendez-vous qu'il "retour" - il ouvre un fichier, sur la plupart des plates-formes en créant une si elle n'existe pas.

Vous devriez probablement flose (FP) le fichier à la fin.


0 commentaires

13
votes

autre qu'une ancienne variante de principal , il n'y a pas vraiment beaucoup mal avec ce code. Il devrait, sauver des erreurs, créer le fichier.

Cependant, étant donné que vous ne vérifiez pas la valeur de retour de fopen , vous pouvez obtenir une erreur de sorte que vous ne le savez pas.

Je commencerais avec: xxx


Si vous êtes adontif que le fichier n'est pas en cours de création, mais le code ci-dessus indique qu'il est, Ensuite, vous pouvez être une victime de l'IDE redouté, travaille dans un répertoire différent de ce que vous pensez "Syndrome: -)

Certains IDes (tels que Visual Studio) exécuteront réellement votre code pendant qu'ils sont dans un répertoire comme \ bin ou \ débogage . Vous pouvez le savoir en mettant: xxx

dans votre code pour voir où il fonctionne. c'est où un fichier sera créé si vous spécifiez une ligne de chemin relatif "write.txt" . Sinon, vous pouvez spécifier un chemin absolu pour vous assurer qu'il tente de le créer à un point spécifique du système de fichiers.


5 commentaires

Je pense que les fonctions déclarées sans type de retour sont supposées renvoyer un int dans les anciennes versions du langage C. Ceci est pas vrai pour C ++; La fonction principale est requise renvoyer un int .


Je pense que vous trouverez à partir de C99 que vous devriez retourner une INT explicitement. C89 / 90 autorisés par défaut.


C'est une bonne idée de fermer les fichiers que vous ouvrez; Il est correct de laisser des fichiers hérités (comme entrée standard et sortie standard) ouverte à la sortie.


Vous feriez mieux d'utiliser perror ("fichier non créé ok"); que le printf () , puisqu'il doit imprimer une erreur lisible par l'utilisateur plutôt qu'un inscrits Numéro d'erreur.


Oui, je suis tout à fait d'accord, vous êtes mieux de faire cela. Cela n'a également rien à voir avec la question en tant que SE :-) Pensez-y en tant que code de soutien.



0
votes

Je pense que vous devriez étudier plus de fondamentaux en C avant de commencer à essayer de travailler avec des fichiers. Un retour signifie que certaines données sont transmises au code d'appel de la fonction appelée. Dans ce cas, vous retournez 0 à la fin de votre programme. Vous n'avez rien fait avec votre pointeur de fichier, sauf causer un nouveau fichier à créer ...


2 commentaires

Je sais. J'ai mangé ma question. Mais ce que je voulais dire, aucun fichier n'a été ouvert / créé. J'essaie de suivre K & R P160-161.


K & R est un outil horrible pour apprendre C, vous seriez mieux avec quelque chose d'un peu plus moderne.



2
votes

Je pense que vous voulez imprimer le contenu du fichier write.txt. (Supposons qu'il contient des caractères).

#include <stdio.h>

int main()
{             

    FILE *fp,char ch;

    fp=fopen("write.txt","r");

    if(fp==NULL)
    {
        printf("Some problem in opening the file");
        exit(0);
    } 
    else
    { 
        while((ch=fgetc(fp))!=EOF)
        {
            printf("%c",ch);
        }
    }

    fclose(fp);

    return 0;  
}


1 commentaires

Le fichier est ouvert pour écrire, ne pas lire. En outre, votre printf n'inclut pas Erno afin que vous ne sachiez pas pourquoi l'Open a échoué. Utilisez strError ou Perror.