Problem avec scanf et fwrite dans boucle while

Signaler
Messages postés
11
Date d'inscription
jeudi 28 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2006
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
bonjour voici mon programme :

#include <stdio.h>
#include <stdlib.h>

int main()
{
int choix;
FILE* fichier;

while (1)
{
scanf("%d",&choix);


if (choix > 99)
{
choix = 0;
}

fichier = fopen("C:\typeaffichage","wb");

if (fichier!=NULL)
{
fwrite(&choix,sizeof(int),1,fichier);
fclose(fichier);
}
}
sleep(1);
return 0;
}

J'utilise ce programme sous linux.
Lorsque je lance le prog, je saisie une fois la valeur pour choix et après
l'execution s'arrête. Est-ce que quelqu'un pourraît m'aider à résoudre ce
problème.
Merci d'avance

9 réponses

Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
21
Lorsque je lance le prog, je saisie une fois la valeur pour choix et après

l'execution s'arrête. => tu veux dire que le programme ce termine  et  que tu as nouveau acces a la console ??

Normalement avec ton code, il devrait ce remettre en attente de saisie. Pour voir ce qu'il se passe rajoute des printf

(surtout devant le scanf, version "taper votre  choix")


++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ou avec un débuggeur pour voir ce qui se passe pas à pas.


Ensuite, je ne sais pas ce que tu veux faire mais tu ouvre ton fichier en wb ce qui fait que chaque valeur ajouté écrasera l'autre. Il faut ouvrir en ab pour ajouter des valeurs. Ensuite, je ne sais pas ce que tu veut faire mais faire &choix va te renvoyer l'adresse de choix et donc, écrire dans le fichier une adresse plutot qu'une valeur.


C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution



http://programmationdebat.discutforum.com
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est marrant d'ouvrir le fichier C:\typeaffichage sous Linux. (en plus faut écrire C:\\ pas C:\ sinon \t est considéré comme une tabulation)
[auteurdetail.aspx?ID=617077 SAKingdom]> C'est bien &choix qu'il faut mettre pour écrire la valeur de choix (comme on le ferait avec WriteFile)

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
21
Personnelement, je crois que le &choix est
correct, car dans la fonction fwrite il faut un pointeur sur les
donnees à écrire.


++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ah je savais pas. Merci. Avec WriteFile aussi ??? Hmmm va faloir que je revoie quelque notions. J'en ai perdu un bout.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution

http://programmationdebat.discutforum.com
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
14
Pour voir l'erreur, remplaces par :
    while (1)
    {
          scanf("%d",&choix);
          
          
          if (choix > 99)
          {
                    choix = 0;
          }

          fichier = fopen("C:\typeaffichage","wb");
          
          if (fichier != NULL)
          {
                            if ( fwrite(&choix,sizeof(int),1,fichier) < 1 )
                                perror("fwrite");
                            if ( fclose(fichier) == EOF )
                                perror("fclose");              
          }    else
              perror("fopen");
    }

perror est une fonction bien utile.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
fichier = fopen("C:\typeaffichage","wb"); !!!!!!!!!
fichier = fopen("C:\\typeaffichage","wb"); OK

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution

http://programmationdebat.discutforum.com
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Si fwrite prenait les données à écrire par valeur (plutot que leur adresse), ce serait compliqué d'écrire plus de 4 octets d'un coup

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Oui ok. J'étais un peu engourdie. Je comprend maintenant (après quelques baf pour me réveiller ;).

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution

http://programmationdebat.discutforum.com