Programme d'ecriture dans un tableur
Fermé
Dredall
-
Modifié par Dredall le 22/10/2013 à 13:22
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 22 oct. 2013 à 17:31
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 22 oct. 2013 à 17:31
A voir également:
- Programme d'ecriture dans un tableur
- Écriture facebook - Guide
- Tableur gratuit - Télécharger - Tableur
- Programme demarrage windows 10 - Guide
- Ecriture en gras - Guide
- Formule tableur somme - Guide
3 réponses
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 22/10/2013 à 14:50
Modifié par [Dal] le 22/10/2013 à 14:50
Salut Dredall,
Je peux compiler le programme sans problème
Compile ton programme avec les Warnings, et tu verras déjà un bon nombre de problèmes (avec gcc, l'option -Wall est un bon début, si tu as un autre compilateur, vois ta documentation).
Comprends pourquoi ces warnings sont générés et corrige les un par un.
Ton crash est certainement dû au fait que ton scanf doit passer un pointeur vers une zone de mémoire allouée pouvant accueillir le type de données spécifié, et que là tu passes le contenu de la variable "Relance" et non le pointeur sur l'espace alloué à cette variable, donc
gcc, avec l'option -Wall te le dit :
- ton fichier n'est pas ouvert dans le code que tu postes
- tu fais une boucle while(1) mais rien n'est prévu pour en sortir
- tu utilises des ' pour des chaînes et tu fais des affectations qui montrent que tu confonds les char et les chaînes en C
Voilà un exemple de création et d'usage de char et de chaînes en C.
Dal
Je peux compiler le programme sans problème
Compile ton programme avec les Warnings, et tu verras déjà un bon nombre de problèmes (avec gcc, l'option -Wall est un bon début, si tu as un autre compilateur, vois ta documentation).
Comprends pourquoi ces warnings sont générés et corrige les un par un.
Ton crash est certainement dû au fait que ton scanf doit passer un pointeur vers une zone de mémoire allouée pouvant accueillir le type de données spécifié, et que là tu passes le contenu de la variable "Relance" et non le pointeur sur l'espace alloué à cette variable, donc
scanf("%d", &Relance);au lieu de scanf("%d", Relance); pour
int Relance;.
gcc, avec l'option -Wall te le dit :
format '%d' expects argument of type 'int *', but argument 2 has type 'int'
- ton fichier n'est pas ouvert dans le code que tu postes
- tu fais une boucle while(1) mais rien n'est prévu pour en sortir
- tu utilises des ' pour des chaînes et tu fais des affectations qui montrent que tu confonds les char et les chaînes en C
Voilà un exemple de création et d'usage de char et de chaînes en C.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char OnOff = 'A'; /* un seul caractère entre ' */
char * s1 = "une chaîne en C"; /* plusieurs caractères entre " */
char s2[16] = "alternativement";/* autre déclaration de chaîne */
/* comparaison d'une chaîne */
char * st = "DEMAR";
if (strcmp(st, "DEMAR") == 0)
{
printf("st vaut bien DEMAR\n");
}
/* affectation d'une chaîne */
char * st_vide; /* pointeur sur char non alloué */
st_vide = malloc(6); /* espace pour 5 caractères plus '\0' */
strcpy(st_vide, "ARRET");/* copie */
/* affichage d'une chaîne */
printf("st_vide = %s\n", st_vide); /* spécificateur %s */
/* affichage d'un caractère : char */
printf("OnOff = %c\n", OnOff); /* spécificateur %c */
/* libération de la mémoire allouée avec malloc */
free(st_vide);
return 0;
}
Dal
Dredall
Messages postés
2
Date d'inscription
mardi 22 octobre 2013
Statut
Membre
Dernière intervention
22 octobre 2013
22 oct. 2013 à 15:19
22 oct. 2013 à 15:19
Le fichier est bien ouvert, j'ai supprimé la ligne par inadvertance en supprimant des commentaires avant de poster sur le forum.
J'ai corrigé le scanf("%d", Relance) en scanf("%d", &Relance) et j'ai changé les ' en "
Je peux maintenant effectué autant de fois que je le désire cependant la fonction fseek ne decale pas le pointeur après le message grâce à Compt comme je l'aurais voulu et je ne comprend pas pourquoi. Le message reste à la même place alors que le pointeur devrait être décalé jusqu'à après "DEMAR" ou "ARRET".
Et mon programme toujours DEMAR et jamais arret.
J'ai corrigé le scanf("%d", Relance) en scanf("%d", &Relance) et j'ai changé les ' en "
Je peux maintenant effectué autant de fois que je le désire cependant la fonction fseek ne decale pas le pointeur après le message grâce à Compt comme je l'aurais voulu et je ne comprend pas pourquoi. Le message reste à la même place alors que le pointeur devrait être décalé jusqu'à après "DEMAR" ou "ARRET".
Et mon programme toujours DEMAR et jamais arret.
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 22/10/2013 à 15:28
Modifié par [Dal] le 22/10/2013 à 15:28
poste ton code modifié.
Fait le entre balises <code>, comme cela :
<code>
Pour que ton programme soit plus lisible.
Si tu as bien lu mon message précédent, tu dois avoir compris qu'il ne suffit pas de remplacer ' par " et que les char et les chaînes sont deux choses différentes et qu'on ne les utilise pas de la même façon.
Dal
Fait le entre balises <code>, comme cela :
<code>
#include <stdio.h></code>
int main(void)
{
printf("Hello world\n");
return 0;
}
Pour que ton programme soit plus lisible.
Si tu as bien lu mon message précédent, tu dois avoir compris qu'il ne suffit pas de remplacer ' par " et que les char et les chaînes sont deux choses différentes et qu'on ne les utilise pas de la même façon.
Dal
Dredall
Messages postés
2
Date d'inscription
mardi 22 octobre 2013
Statut
Membre
Dernière intervention
22 octobre 2013
22 oct. 2013 à 15:36
22 oct. 2013 à 15:36
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char*argv[])
{
int Relance;
char* OnOff;
int Variable;
long Compt;
long Espace;
Compt=0;
OnOff="ARRET";
Variable = 0;
FILE* Fichier = NULL;
Fichier = fopen("Test.csv","w");
if (Fichier != NULL)
{
while(Relance != 2)
{
Espace = Compt*33;
time_t t = time(NULL);
fseek(Fichier,Espace,SEEK_SET);
if (Variable==1)
{
OnOff="ARRET";
Variable = 0;
}
else
{
OnOff="DEMAR";
}
printf("pour relancer taper 1 puis ENTREE ou 2 pour sortir\n");
scanf("%d",&Relance);
if (Relance==1);
{
fprintf(Fichier,"%s,%s\n", ctime(&t),OnOff);
fclose(Fichier);
Compt=Compt+1;
}
}
}
else
{
printf("Impossible d'ouvrir le fichier texte");
}
return 0;
}
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
22 oct. 2013 à 17:26
22 oct. 2013 à 17:26
Pour OnOff, tu crée un pointeur sur char non alloué. De plus, tu utilise = alors que je t'ai dit d'utiliser strcpy.
Tu peux faire cela, en revanche :
si tu fais
http://www.cplusplus.com/reference/cstdio/fopen/
Donc, tu ne peux pas faire un fseek sur des données qui n'existent pas.
Pour t'en convaincre fais ceci dans ton code :
Vois http://www.cplusplus.com/reference/cstdio/fseek/
Je ne sais pas ce que tu veux faire. Si tu veux simplement écrire "Espace" fois le caractère espace, tu dois écrire "Espace" fois le caractère espace et non pas ce que tu fais. Si tu veux faire autre chose, clarifie, stp.
Il y a un
Si tu fais
Dal
Tu peux faire cela, en revanche :
char OnOff[6];ailleurs dans ton code, tu fais des affectations illégales, corrige cela aussi.
strcpy(OnOff, "ARRET");
si tu fais
Fichier = fopen("Test.csv", "w");, cela signifie que ton fichier est nouvellement créé, et non pas préexistant.
http://www.cplusplus.com/reference/cstdio/fopen/
Donc, tu ne peux pas faire un fseek sur des données qui n'existent pas.
Pour t'en convaincre fais ceci dans ton code :
if (fseek(Fichier, Espace, SEEK_SET) != 0)
{
printf("Erreur : fseek a échoué\n");
return EXIT_FAILURE;
}
Vois http://www.cplusplus.com/reference/cstdio/fseek/
Je ne sais pas ce que tu veux faire. Si tu veux simplement écrire "Espace" fois le caractère espace, tu dois écrire "Espace" fois le caractère espace et non pas ce que tu fais. Si tu veux faire autre chose, clarifie, stp.
Il y a un
;à la fin de ton
if (Relance == 1), retire le.
Si tu fais
fclose(Fichier);alors que ta boucle n'est pas terminée, tu ne pourras plus rien écrire dans Fichier. Ce
fclose(Fichier);devrait être à l'extérieur de la boucle while.
Dal
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 22/10/2013 à 17:32
Modifié par [Dal] le 22/10/2013 à 17:32
bien sûr, pour utiliser strcpy et les autres fonctions de manipulation de chaînes en C, tu dois inclure le header string.h, comme indiqué dans mon précédent message.
Dal
Dal