Problem avec scanf et fwrite dans boucle while

kamal93270 Messages postés 11 Date d'inscription jeudi 28 avril 2005 Statut Membre Dernière intervention 26 juillet 2006 - 26 juil. 2006 à 15:43
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 26 juil. 2006 à 16:28
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

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
26 juil. 2006 à 15:53
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")


++
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 juil. 2006 à 16:03
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 juil. 2006 à 16:09
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
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
26 juil. 2006 à 16:10
Personnelement, je crois que le &choix est
correct, car dans la fonction fwrite il faut un pointeur sur les
donnees à écrire.


++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 juil. 2006 à 16:12
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
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
26 juil. 2006 à 16: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.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 juil. 2006 à 16: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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 juil. 2006 à 16:16
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 juil. 2006 à 16:28
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
0
Rejoignez-nous