Erreur compilation génerateur c++
Résolu/Fermé
A voir également:
- Erreur compilation génerateur c++
- Erreur 0x80070643 - Accueil - Windows
- Generateur mot de passe - Télécharger - Sécurité
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur g030 - Forum Bbox Bouygues
7 réponses
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
10 sept. 2010 à 00:01
10 sept. 2010 à 00:01
essaye de remplacer
scanf("%d", &ch1);
par
scanf("%l", &ch1);
puisque tu as déclaré ch1 comme un long et non un int.
scanf("%d", &ch1);
par
scanf("%l", &ch1);
puisque tu as déclaré ch1 comme un long et non un int.
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
Modifié par Pacorabanix le 10/09/2010 à 02:04
Modifié par Pacorabanix le 10/09/2010 à 02:04
PS : tu as écrit que c'est une erreur de compilation, mais justement ce n'en est pas une, c'est une erreur à l'exécution.
Utilisateur anonyme
22 sept. 2010 à 21:56
22 sept. 2010 à 21:56
pour le fclose, j'ai essayé, le prb persiste. Mais merci quand meme.
%l ? à quoi ça sert ?
%l ? à quoi ça sert ?
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
Modifié par Pacorabanix le 22/09/2010 à 23:11
Modifié par Pacorabanix le 22/09/2010 à 23:11
donc le fopen, c'est obligatoire (et le fclose il faut le mettre aussi) ça c'est sûr.
pour le % , c'est pour préciser le type de données que tu mets. %d pour un entier (type "int") et %ld ou %l je ne sais plus bien pour un entier long (puisque ch1 est de type "long"=="long int")
mais sinon concernant le problème des fichiers,
En essayant de compiler ton code j'obtiens un Warning (avertissement) :
G:\Prog\C\test\main.c [Warning] assignment from incompatible pointer type
concernant la ligne :
fichier = ("C:\\GENERATOR.txt");
comme a dit Char Sniper, ça n'a pas de sens. Le compilateur peut quand même faire son travail, mais ce genre de ligne ne veut pas dire grand chose.
fichier est de type FILE* et tu lui assignes une chaine de caractères (plus ou moins un char*) !
alors forcément quand fprintf() est appelée, il y a un problème impossible à résoudre pour le programme, qui s'attend à avoir un FILE* dans fichier, or c'est une chaine de caractère, et donc le programme ne comprend pas ce qu'il se passe. fprintf tente d'interpréter ça comme quelque chose qui n'a rien à voir, ça ne veut rien dire ---> plantage de l'application.
tu dois utiliser correctement fopen :
fichier = fopen("C:\\GENERATOR.txt", "w");
serait déjà mieux.
C'est ce que tu as fait ?
pour le % , c'est pour préciser le type de données que tu mets. %d pour un entier (type "int") et %ld ou %l je ne sais plus bien pour un entier long (puisque ch1 est de type "long"=="long int")
mais sinon concernant le problème des fichiers,
En essayant de compiler ton code j'obtiens un Warning (avertissement) :
G:\Prog\C\test\main.c [Warning] assignment from incompatible pointer type
concernant la ligne :
fichier = ("C:\\GENERATOR.txt");
comme a dit Char Sniper, ça n'a pas de sens. Le compilateur peut quand même faire son travail, mais ce genre de ligne ne veut pas dire grand chose.
fichier est de type FILE* et tu lui assignes une chaine de caractères (plus ou moins un char*) !
alors forcément quand fprintf() est appelée, il y a un problème impossible à résoudre pour le programme, qui s'attend à avoir un FILE* dans fichier, or c'est une chaine de caractère, et donc le programme ne comprend pas ce qu'il se passe. fprintf tente d'interpréter ça comme quelque chose qui n'a rien à voir, ça ne veut rien dire ---> plantage de l'application.
tu dois utiliser correctement fopen :
fichier = fopen("C:\\GENERATOR.txt", "w");
serait déjà mieux.
C'est ce que tu as fait ?
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
Modifié par Pacorabanix le 22/09/2010 à 23:31
Modifié par Pacorabanix le 22/09/2010 à 23:31
PS : je viens de vérifier, tu peux très bien laisser les %d, il n'y a pas de souci si tes nombres sont petits (mieux vaut déclarer ch1 et ch2 comme des "int" néanmoins, pas de raison que ce soient des "long", sauf si tu veut remplir ton disque dur avec ton fichier GENERATOR.txt ;) )
c'est bien un problème de fopen() !
c'est bien un problème de fopen() !
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
Modifié par Pacorabanix le 22/09/2010 à 23:32
Modifié par Pacorabanix le 22/09/2010 à 23:32
par contre il y a encore un problème.
Le problème est que scanf("%s", choix) ne va pas enregistrer la phrase complète. Dès que tu mets un espace il ne prendra que le premier mot dans "choix".
Ensuite, le second "mot" que tu auras mis dans ta phrase sera utilisé pour répondre à la question "entrez le nombre de répétition" et évidemment, ça causera un problème. Tu n'auras même pas le temps de donner toi-même un nombre de répétitions et le programme s'arretera ou fera un bug etc....
voir : http://www.siteduzero.com/tutoriel-3-35363-realiser-des-saisies-securisees-grace-a-fgets.html
Le problème est que scanf("%s", choix) ne va pas enregistrer la phrase complète. Dès que tu mets un espace il ne prendra que le premier mot dans "choix".
Ensuite, le second "mot" que tu auras mis dans ta phrase sera utilisé pour répondre à la question "entrez le nombre de répétition" et évidemment, ça causera un problème. Tu n'auras même pas le temps de donner toi-même un nombre de répétitions et le programme s'arretera ou fera un bug etc....
voir : http://www.siteduzero.com/tutoriel-3-35363-realiser-des-saisies-securisees-grace-a-fgets.html
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
22 sept. 2010 à 23:34
22 sept. 2010 à 23:34
ou tu peux voir aussi : https://forums.commentcamarche.net/forum/affich-5045469-introduire-des-phrases-en-c
overcode
Messages postés
119
Date d'inscription
jeudi 6 décembre 2007
Statut
Membre
Dernière intervention
21 octobre 2011
27
22 sept. 2010 à 23:36
22 sept. 2010 à 23:36
Si je m'en tiens à l'intitulé de ton message, ce serait du C++, mais je vois là que c'est du C.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
28 sept. 2010 à 21:10
28 sept. 2010 à 21:10
j'ai entré fopen et fclose comme vous disez mais le prb persiste toujours voici mon nouveau code :
#include <stdio.h>
#include <stdlib.h>
int main()
{
char choix[80] = {0}; long ch1 = 0, ch2 = 1;
FILE* fichier = NULL;
fichier = fopen("C:\\GENERATOR.txt", "r+");
printf("\t CE PROGRAMME VOUS PERMET DE GENERER TOUT TYPE DE PHRASE REPETEE\n\n");
printf("Entrez la phrase : ");
scanf("%s", choix);
printf("\nEntrez le nombre de repetitions : ");
scanf("%d", &ch1);
printf("Patientez SVP\n");
while (ch2 <= ch1) {
fprintf(fichier, "%s\n", choix);
ch2++; }
fclose(fichier);//fermeture du fichier
system("PAUSE");
return 0;
}
//////////////////////////////////////////
toujours le meme phénomene, quand j'entre "ch1", j'ai meme changé scanf par fgets mais voici le résultat :
Program received signal SIGSEGV, Segmentation fault, do you want to view the backtrace. Et le programme se bloque !! que faire !
#include <stdio.h>
#include <stdlib.h>
int main()
{
char choix[80] = {0}; long ch1 = 0, ch2 = 1;
FILE* fichier = NULL;
fichier = fopen("C:\\GENERATOR.txt", "r+");
printf("\t CE PROGRAMME VOUS PERMET DE GENERER TOUT TYPE DE PHRASE REPETEE\n\n");
printf("Entrez la phrase : ");
scanf("%s", choix);
printf("\nEntrez le nombre de repetitions : ");
scanf("%d", &ch1);
printf("Patientez SVP\n");
while (ch2 <= ch1) {
fprintf(fichier, "%s\n", choix);
ch2++; }
fclose(fichier);//fermeture du fichier
system("PAUSE");
return 0;
}
//////////////////////////////////////////
toujours le meme phénomene, quand j'entre "ch1", j'ai meme changé scanf par fgets mais voici le résultat :
Program received signal SIGSEGV, Segmentation fault, do you want to view the backtrace. Et le programme se bloque !! que faire !
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
28 sept. 2010 à 21:27
28 sept. 2010 à 21:27
d'une part il faudrait mieux ouvrir ton fichier comme ceci
puisque tu ne fais qu'écrire dedans.
Ensuite teste de cette manière :
est-ce que le problème persiste lorsque tu rentres "0" pour ch1 ?
et lorsque tu rentres un seul mot (Sans espace ni signe de ponctuation) ?
parceque moi j'ai fais le même code avec "w" à la place de "r+" et ça marche (Avec un seul mot)
fichier = fopen("C:\\GENERATOR.txt", "w");
puisque tu ne fais qu'écrire dedans.
Ensuite teste de cette manière :
est-ce que le problème persiste lorsque tu rentres "0" pour ch1 ?
et lorsque tu rentres un seul mot (Sans espace ni signe de ponctuation) ?
parceque moi j'ai fais le même code avec "w" à la place de "r+" et ça marche (Avec un seul mot)
Utilisateur anonyme
28 sept. 2010 à 21:13
28 sept. 2010 à 21:13
MERCI A VOUS TOUS ! PRB RESOLU ... il fallut remplacer "r+" par "w" c'est ce que j'ai raté.
MERCI INFINIMENT !
A +
MERCI INFINIMENT !
A +
10 sept. 2010 à 11:33
28 sept. 2010 à 21:50