| | Gandsoll | Posté le 05/04/2004 @ 20:36 | Petit astucien
137 Messages
| Bonsoir les gens
1ere partie
int copy(){
char nsource[100];
char ncopie[100];
int fsource,fcopie,fin;
char x;
FILE*source;
FILE*copie;
printf("Le fichier a copier doit etre dans le meme repertoire que ce programme\n\n");
printf("fichier a copier: ");
scanf("%s",fsource);
sprintf(nsource,"%s",fsource);
source=fopen(nsource,"rb");
if(!source) {printf("le fichier n'existe pas"); exit(0);}
printf("\n Nom de la copie: ");
scanf("%s",fcopie);
sprintf(ncopie,"%s",fcopie);
copie=fopen(ncopie,"wb");
while(feof(source)==0){
x=getc(source);
fputc(x,copie);
}
fclose(source);
fclose(copie);
printf("Copie Termine\n");
getch();
}
""""
voila un bout du code
et visual me demande de declarer exit en tant que fonction
je peu mettre quoi pour le satisafaire ????
""""
seconde partie
int main()
{
printf("\t\t1 -> Copie de fichiers\n\n");
printf("\t\t2 -> Suprimer fichier\n\n");
int choix=0;
printf("Choix: ");
scanf("%d",&choix);
if (choix==1) copy();
if (choix==2) suppr();
if (choix!=1 && choix!=2) printf("Choix incorrect");
getch();
}
il me di qu'il manque un void la :
'main' : function should return a value; 'void' return type assumed
si je met main(void) ca sera good ?
Bien le bonsoir
| | |
| |
| Publicité |
|
| | koala01 | Posté le 05/04/2004 à 23:10 | Astucien
4715 Messages
| ouaip, la syntaxe void main(void) est la syntaxe habituellement utilisée en C (elle est obsolete dans C++)
De meme, avoir int nom_de_fonction() signale que tu as affaire à une fonction et non à une procédure.
La différence entre les deux est qu'une fonction doit renvoyer une valeur correspondant au terme qui précede le nom de la fonction (ici, il s'agit donc d'un entier simple "int")
avec int nom_de_fonction() il faut donc la commande return un_entier pour qu'il soit content
une procédure (fonction spéciale qui ne renvoie pas de variable) sera déclarée selon la syntaxe void nom_de_fonction() ou, s'il n'est pas content, void nom_de_fonction(void) pour signaler que la fonction n'a pas besoin de paramètres [clindoeil] | | | | | Gandsoll | Posté le 06/04/2004 à 20:28 | Petit astucien
137 Messages
| mci bien pour la reponse a la deuxieme question ;)
je men doutais mai de la a dire ue c'est obsolete
pour la premeire question je le declare ou alors
avec :
int exit(0)
avec un return un peu plus loin ???
ou je met a part un truc du style
void exit(void)
en vous remerciant | | | | | koala01 | Posté le 12/04/2004 à 02:24 | Astucien
4715 Messages
| Il semblerait que le fichier d'entete <iostream.h> soit nécessaire à la fonction exit()...
Ce fichier d'entete permet en outre l'utilisation de cin et de cout, qui sont beaucoup plus faciles d'utilisation que sprintf et scanf [clindoeil]
En plus, il semblerait qu'il faille utiliser
exit (-1) plutot que exit(0).
Il ne faut par contre, une fois iostream inclus, plus déclarer la fonction exit, donc tu peux modifier simplement le code en
if(!source) {printf("le fichier n'existe pas"); exit(-1);}
Un dernier petit conseil...
Je sais bien que sur ce forum ce n'est possible qu'en utilisant [ code] [ / code], mais tu as grandement intérêt à envisager une indentation correcte de ton code, et une déclaration de variables à concurence d'une par ligne de manière à pouvoir le relire plus facilement.
En plus, il est très utile de mettre quelques commentaires, qui ne seront de toutes facon pas pris en compte au moment de la compilation (certains article préconnisent jusqu'à 1/3 commentaires, 2/3 code....)
Concernant ton code, cela donnerait +- ceci:
[code]
int copy()
{
// déclaration des nom de fichier source et de fichier cible
char nsource[100];
char ncopie[100];
int fsource;
int fcopie;
int fin;
char x;
FILE*source;
FILE*copie;
printf("Le fichier a copier doit etre dans le meme repertoire que ce programme\n\n");
printf("fichier a copier: ");
scanf("%s",fsource);
sprintf(nsource,"%s",fsource);
source=fopen(nsource,"rb");
if(!source)
{
printf("le fichier n'existe pas");
exit(0);
}
printf("\n Nom de la copie: ");
scanf("%s",fcopie);
sprintf(ncopie,"%s",fcopie);
copie=fopen(ncopie,"wb");
//effectue la copie du fichier
while(feof(source)==0)
{
x=getc(source);
fputc(x,copie);
}
fclose(source);
fclose(copie);
printf("Copie Termine\n");
getch();
}
[/code]
Sans oublier, bien sûr, que je me suis contenté de faire un copier/coller de ton code sans le corriger et que donc, cette fonction devrait renvoyer une valeur (ou, si tu veux que ce soit une procédure, remplacer le int de la première ligne par void)
Avoues quand meme que c'est autrement plus lisible [clindoeil] | | | | | koala01 | Posté le 12/04/2004 à 02:33 | Astucien
4715 Messages
| Et par la même occasion, il serait pas mal de trouver une autre solution à tes
char nsource[100];
char ncopie[100]; ...
En effet, bien que tu aies compté fort large pour la longueur possible des noms de fichier, ton approche souffre, selon moi, de deux défauts majeurs:
-Si on introduit un nom au format "DOS3 (8+3), on perd inutilement 89 octets mémoire par nom de fichier (meme si au prix actuel de la mémoire....)
-si on essaie de mettre un nom 101 caractères ou plus, ton programme plantera en beauté ...ce qui est bien pire[clindoeil] | | | |
| | Haut de la page |
| | Inscrivez-vous ! |
- Posez vos questions
- Résolvez vos problèmes
- Aidez les autres
- Participez et créez vos discussions
- Dialoguez en privé avec d'autres membres
- Suivez vos sujets préférés
- Affichez les signatures des membres
|
|