Bonjour,
est ce que quelqu'un pourrait m'indiquer,comment il faut que je m'y prenne pour sauvegarder ce que j'ai tapé,sur la ligne de commande,dans un fichier.
Merci
Version imprimable
Bonjour,
est ce que quelqu'un pourrait m'indiquer,comment il faut que je m'y prenne pour sauvegarder ce que j'ai tapé,sur la ligne de commande,dans un fichier.
Merci
Bonjour
je vous invite à visiter ce lien http://c.developpez.com/cours/
A+
On utilise pour ouvrir un fichier
Exemple:Citation:
FILE *fopen(const char *path, const char *mode);
Ensuite, on utilise pour écrire dans un fichier fprintf qui marche comme printf mais tu mets le pointeur de fichier en premier argument.Code:
1
2 FILE *f = fopen("test.txt","w"); //pour ouvrir le fichier test.txt en écriture
Et finalement, tes arguments se trouvent dans un tableau généralement nommé char **argv dont la première dimension (donc le nombre d'arguments) est donné par une variable généralement appelée argc...Citation:
int fprintf(FILE *stream, const char *format, ...);
Et on les obtient en écrivant le main comme ceci:
Avec tous ces éléments, tu devrais y arriver...Code:
1
2
3
4
5
6 int main(int argc, char **argv) { printf("Il y a %d arguments passés par la ligne de commande\n",argc); return 0; }
Jc
Si j'écris plusieurs lignes ,est ce que c'est mieux d'utiliser fgets ou bien de rester avec char**argvCitation:
Envoyé par fearyourself
J'ai l'impression qu'il y a confusion.Citation:
Envoyé par Gryzzly
argv est un tableau a deux dimensions. Un tableau de chaines en somme. Tu pourrais ecrire le contenu de ce tableau dans un fichier en le parcourant ligne par ligne. Ce tableau depend de la maniere dont a ete appelle ton programme.
Ex :
Ton tableau va ressembler a ca:Code:
1
2 $> ./my_prog oh qu il est beau mon petit programme
Donc si ton programme est appele de cette facon, il faut que tu utilises argv: que tu le parcoure et que tu l'ecrive, element par element.Code:
1
2
3
4
5
6 argv[0] = "my_prog" argv[1] = "oh" argv[2] = "qu" argv[3] = "il" etc ...
Ca ressemble a ca :
Exemple de fonctionnement:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <stdio.h> int my_strlen(char *str) { int size; size = 0; while (str[size] != 0) size++; return (size); } int main(int argc, char **argv) { FILE *file; int i; char *separator; separator = "\n"; file = fopen("my_file", "w"); for (i = 1; i < argc; i++) { fwrite(argv[i], sizeof(*(argv[i])), my_strlen(argv[i]), file); fwrite(separator, sizeof(*separator), my_strlen(separator), file); } fclose(file); return (0); }
Rien de bien sorcier : on ouvre le fichier, on parcours argv (en commencant par 1 puisque argv[0] est le nom du programme, et en finissant a argc - 1 puisque argc est le nombre d'arguments et que la numerotation d'un tableau commence a 0.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23$> ./my_prog il etait un petit navire euh il etait un petit navire euh qui n avait ja ja jamais navigue $> cat my_file <-- affiche le contenu d'un fichier il etait un petit navire euh il etait un petit navire euh qui n avait ja ja jamais navigue
fgets() sert completement a autre chose :
C'est un fontion tres gentille qui lit une ligne dans un fichier.
Une ligne se terminant par un '\n' ou la fin du fichier.
On peut l'utiliser pour lire sur l'entree standard : le clavier.
Dans ce cas ton programme possede un tout autre fonctionnement: a chaque fois que l'utilisateur tape une ligne, elle est entree dans le fichier.
Mais pour en revenir a ta question initiale, fgets() ne te sert a rien en l'occurence.
Merci de vos réponses.
Et pour faire l'inverse;à savoir lire des données à partir d'un fichier,comment faut 'il faire.
Utiliser fgets, cette fois-ci.
pour l'écriture, c'est peut-être un peu compliqué non ?Code:
1
2
3
4
5
6
7
8
9
10 FILE *f = fopen("petit_navire.txt", "r"); if (f != NULL) { char buf[256]; while(fgets-buf, sizeof(buf), f) != NULL) { // je chante la chanson } fclose(f); }
Citation:
Envoyé par Jack_serious
Code:fprintf(file, "%s\n", argv[i]).
Merci bienCitation:
Envoyé par Trap D
Attention, j'ai fait une faute de frappe :
C'estCode:while(fgets-buf, sizeof(buf), f) != NULL)
Code:while(fgets(buf, sizeof(buf), f) != NULL)
Hum, en principe, on ne répond pas aux questions basiques qui ont leurs réponses dans n'importe quel cours ou livre de C. C'est à toi d'apprendre les bases.Citation:
Envoyé par Gryzzly
http://www.linux-kheops.com/doc/ansi-c/Introduction_ANSI_C.htm
Nous, on est plutôt là pour d'éventuelles corrections et des techniques plus ou moins avancées.
Tout a fait exact.Citation:
Envoyé par Trap D
C'est purement personnel je ne suis pas un habitue des fonctions de lecture/ecriture formatees.