Marche pas toujours. On peut aussi lire tous les caractères du fichier et ajouter 1 à count quand c'est un 'n'. On initialise count à 0 ou 1 suivant que l'on désire qu'une dernière ligne non terminée par 'n' soit comptée ou non (si on veut la compter, un fichier vide aura 1 ligne). -- http://patrick.davalan.free.fr/
Marche pas toujours.
On peut aussi lire tous les caractères du fichier et ajouter 1 à count
quand c'est un 'n'.
On initialise count à 0 ou 1 suivant que l'on désire qu'une dernière
ligne non terminée par 'n' soit comptée ou non (si on veut la compter,
un fichier vide aura 1 ligne).
--
http://patrick.davalan.free.fr/
Marche pas toujours. On peut aussi lire tous les caractères du fichier et ajouter 1 à count quand c'est un 'n'. On initialise count à 0 ou 1 suivant que l'on désire qu'une dernière ligne non terminée par 'n' soit comptée ou non (si on veut la compter, un fichier vide aura 1 ligne). -- http://patrick.davalan.free.fr/
Zulfukar Arslan
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire ces arguments. A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui sont les deux fichiers.
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne. Comment faire?
Harpo wrote:
Zulfukar Arslan wrote:
Bonjour a tous,
J'ai une petite appli en C qui doit connaitre le nombre de lignes de deux fichiers avant de faire des calculs. Comment connaitre ce nombre de lignes?
en les donnant en arguments à ton programme $ myprogram --n1 `wc -l myfile1` --n2 `wc -l myfile2`
les '`' sont des backquotes.
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en
argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire
ces arguments.
A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui sont
les deux fichiers.
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne.
Comment faire?
Harpo wrote:
Zulfukar Arslan wrote:
Bonjour a tous,
J'ai une petite appli en C qui doit connaitre le nombre de lignes de
deux fichiers avant de faire des calculs. Comment connaitre ce nombre
de lignes?
en les donnant en arguments à ton programme
$ myprogram --n1 `wc -l myfile1` --n2 `wc -l myfile2`
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire ces arguments. A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui sont les deux fichiers.
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne. Comment faire?
Harpo wrote:
Zulfukar Arslan wrote:
Bonjour a tous,
J'ai une petite appli en C qui doit connaitre le nombre de lignes de deux fichiers avant de faire des calculs. Comment connaitre ce nombre de lignes?
en les donnant en arguments à ton programme $ myprogram --n1 `wc -l myfile1` --n2 `wc -l myfile2`
les '`' sont des backquotes.
Targeur fou
Hello,
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire ces arguments. A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui s ont les deux fichiers.
Ben si comptes mettre un char * dans un entier, c'est normal tu récupères n'importe quoi. nombre_de_lignes = (int)strtol(argv[3], NULL,10); + éventuellement controle du retour et de errno
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne.
Si c'est bien le 3ieme arg du programme, y'a pas de raison. C'était juste la conversion chaine en nombre qui n'était pas faite. A noter que de bonnes options de compil t'auraient averties de cette conversion douteuse char * vers int.
A+ Regis
Hello,
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en
argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire
ces arguments.
A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui s ont
les deux fichiers.
Ben si comptes mettre un char * dans un entier, c'est normal tu
récupères n'importe quoi.
nombre_de_lignes = (int)strtol(argv[3], NULL,10);
+ éventuellement controle du retour et de errno
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne.
Si c'est bien le 3ieme arg du programme, y'a pas de raison. C'était
juste la conversion chaine en nombre qui n'était pas faite. A noter
que de bonnes options de compil t'auraient averties de cette conversion
douteuse char * vers int.
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire ces arguments. A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui s ont les deux fichiers.
Ben si comptes mettre un char * dans un entier, c'est normal tu récupères n'importe quoi. nombre_de_lignes = (int)strtol(argv[3], NULL,10); + éventuellement controle du retour et de errno
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne.
Si c'est bien le 3ieme arg du programme, y'a pas de raison. C'était juste la conversion chaine en nombre qui n'était pas faite. A noter que de bonnes options de compil t'auraient averties de cette conversion douteuse char * vers int.
A+ Regis
Zulfukar Arslan
Targeur fou wrote:
Hello,
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire ces arguments. A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui sont les deux fichiers.
Ben si comptes mettre un char * dans un entier, c'est normal tu récupères n'importe quoi. nombre_de_lignes = (int)strtol(argv[3], NULL,10); + éventuellement controle du retour et de errno
Je viens d'essayer. Ca me renvoie tout le temps 0.
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne.
Si c'est bien le 3ieme arg du programme, y'a pas de raison. C'était juste la conversion chaine en nombre qui n'était pas faite. A noter que de bonnes options de compil t'auraient averties de cette conversion douteuse char * vers int.
-g -Wall
A+ Regis
Targeur fou wrote:
Hello,
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en
argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire
ces arguments.
A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui sont
les deux fichiers.
Ben si comptes mettre un char * dans un entier, c'est normal tu
récupères n'importe quoi.
nombre_de_lignes = (int)strtol(argv[3], NULL,10);
+ éventuellement controle du retour et de errno
Je viens d'essayer. Ca me renvoie tout le temps 0.
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne.
Si c'est bien le 3ieme arg du programme, y'a pas de raison. C'était
juste la conversion chaine en nombre qui n'était pas faite. A noter
que de bonnes options de compil t'auraient averties de cette conversion
douteuse char * vers int.
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire ces arguments. A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui sont les deux fichiers.
Ben si comptes mettre un char * dans un entier, c'est normal tu récupères n'importe quoi. nombre_de_lignes = (int)strtol(argv[3], NULL,10); + éventuellement controle du retour et de errno
Je viens d'essayer. Ca me renvoie tout le temps 0.
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne.
Si c'est bien le 3ieme arg du programme, y'a pas de raison. C'était juste la conversion chaine en nombre qui n'était pas faite. A noter que de bonnes options de compil t'auraient averties de cette conversion douteuse char * vers int.
-g -Wall
A+ Regis
Targeur fou
Re,
Targeur fou wrote:
Hello,
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire ces arguments. A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui sont les deux fichiers.
Ben si comptes mettre un char * dans un entier, c'est normal tu récupères n'importe quoi. nombre_de_lignes = (int)strtol(argv[3], NULL,10); + éventuellement controle du retour et de errno
Je viens d'essayer. Ca me renvoie tout le temps 0.
As-tu bien inclus <stdlib.h> histoire que le compilo ne s'amuse pas à essayer de faire semblant de savoir de quelle fonction il s'agit ? (strtol()) ?
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne.
Si c'est bien le 3ieme arg du programme, y'a pas de raison. C'était juste la conversion chaine en nombre qui n'était pas faite. A noter que de bonnes options de compil t'auraient averties de cette conversion douteuse char * vers int.
-g -Wall
?? Je ne'ai pas la doc de gcc sous la main, mais ca me parait bizare qu'avec -Wall il ne soit pas verbeux. Mets aussi -stdÈ9 (ou c99, ou aut' chose) et -W pour voir. Avec le compilo MS CL v12, ce dernier sort clairement 'int' differs in level of indirection from 'char*'
if ( nonconvertie != NULL) { printf("Partie non convertie : %sn", nonconvertie); }
if (errno != 0 ){ puts("Nombre trop grand"); }
if ( !(entier == 0 && strcmp(nonconvertie, argv[1]) == 0) ) { printf("Entier saisi : %dn", entier); }
return 0;
}
Re,
Targeur fou wrote:
Hello,
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en
argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire
ces arguments.
A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui sont
les deux fichiers.
Ben si comptes mettre un char * dans un entier, c'est normal tu
récupères n'importe quoi.
nombre_de_lignes = (int)strtol(argv[3], NULL,10);
+ éventuellement controle du retour et de errno
Je viens d'essayer. Ca me renvoie tout le temps 0.
As-tu bien inclus <stdlib.h> histoire que le compilo ne s'amuse pas à
essayer de faire semblant de savoir de quelle fonction il s'agit ?
(strtol()) ?
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne.
Si c'est bien le 3ieme arg du programme, y'a pas de raison. C'était
juste la conversion chaine en nombre qui n'était pas faite. A noter
que de bonnes options de compil t'auraient averties de cette conversion
douteuse char * vers int.
-g -Wall
?? Je ne'ai pas la doc de gcc sous la main, mais ca me parait bizare
qu'avec -Wall il ne soit pas verbeux. Mets aussi -std=c89 (ou c99, ou
aut' chose) et -W pour voir. Avec le compilo MS CL v12, ce dernier sort
clairement 'int' differs in level of indirection from 'char*'
Merci pour toutes ces astuces. J'avais pensé aussi à les donner en argument en utilisant "wc -l fichier" mais j'ai un probleme pour lire ces arguments. A l'interieur du programme j'ecris:
int nombre_de_lignes;
nombre_de_lignes = argv[3]; // j'ai déja deux autres parametres qui sont les deux fichiers.
Ben si comptes mettre un char * dans un entier, c'est normal tu récupères n'importe quoi. nombre_de_lignes = (int)strtol(argv[3], NULL,10); + éventuellement controle du retour et de errno
Je viens d'essayer. Ca me renvoie tout le temps 0.
As-tu bien inclus <stdlib.h> histoire que le compilo ne s'amuse pas à essayer de faire semblant de savoir de quelle fonction il s'agit ? (strtol()) ?
si je fais printf("nombr de lignes %dn", nombre_de_lignes);
il me renvoie "-1073745949". Je pense que la lecture n'est pas bonne.
Si c'est bien le 3ieme arg du programme, y'a pas de raison. C'était juste la conversion chaine en nombre qui n'était pas faite. A noter que de bonnes options de compil t'auraient averties de cette conversion douteuse char * vers int.
-g -Wall
?? Je ne'ai pas la doc de gcc sous la main, mais ca me parait bizare qu'avec -Wall il ne soit pas verbeux. Mets aussi -stdÈ9 (ou c99, ou aut' chose) et -W pour voir. Avec le compilo MS CL v12, ce dernier sort clairement 'int' differs in level of indirection from 'char*'
if ( nonconvertie != NULL) { printf("Partie non convertie : %sn", nonconvertie); }
if (errno != 0 ){ puts("Nombre trop grand"); }
if ( !(entier == 0 && strcmp(nonconvertie, argv[1]) == 0) ) { printf("Entier saisi : %dn", entier); }
return 0;
}
Harpo
Zulfukar Arslan wrote:
Ben si comptes mettre un char * dans un entier, c'est normal tu récupères n'importe quoi. nombre_de_lignes = (int)strtol(argv[3], NULL,10); + éventuellement controle du retour et de errno
Je viens d'essayer. Ca me renvoie tout le temps 0.
T'as du faire une bourde quelque part, le petit programme suivant marche : ---------- #include <stdio.h> #include <stdlib.h> int main( int argc, char **argv ) { (void)argc; printf( "%dn", (int)strtol( argv[1], NULL, 10 ) ); exit( EXIT_SUCCESS ); } --------- $ gcc -W -Wall -stdÉ9 strtol.c -o strtol $ ./strtol 421 421
Bingo !
-g -Wall
-g ne devrait pas avoir d'incidence sur les warnings, '-W -Wall' me semble un bon compromis entre une profusion d'options et aucune.
-- http://patrick.davalan.free.fr/
Zulfukar Arslan wrote:
Ben si comptes mettre un char * dans un entier, c'est normal tu
récupères n'importe quoi.
nombre_de_lignes = (int)strtol(argv[3], NULL,10);
+ éventuellement controle du retour et de errno
Je viens d'essayer. Ca me renvoie tout le temps 0.
T'as du faire une bourde quelque part, le petit programme suivant
marche :
----------
#include <stdio.h>
#include <stdlib.h>
int
main( int argc, char **argv ) {
(void)argc;
printf( "%dn", (int)strtol( argv[1], NULL, 10 ) );
exit( EXIT_SUCCESS );
}
---------
$ gcc -W -Wall -stdÉ9 strtol.c -o strtol
$ ./strtol 421
421
Bingo !
-g -Wall
-g ne devrait pas avoir d'incidence sur les warnings, '-W -Wall' me
semble un bon compromis entre une profusion d'options et aucune.
Ben si comptes mettre un char * dans un entier, c'est normal tu récupères n'importe quoi. nombre_de_lignes = (int)strtol(argv[3], NULL,10); + éventuellement controle du retour et de errno
Je viens d'essayer. Ca me renvoie tout le temps 0.
T'as du faire une bourde quelque part, le petit programme suivant marche : ---------- #include <stdio.h> #include <stdlib.h> int main( int argc, char **argv ) { (void)argc; printf( "%dn", (int)strtol( argv[1], NULL, 10 ) ); exit( EXIT_SUCCESS ); } --------- $ gcc -W -Wall -stdÉ9 strtol.c -o strtol $ ./strtol 421 421
Bingo !
-g -Wall
-g ne devrait pas avoir d'incidence sur les warnings, '-W -Wall' me semble un bon compromis entre une profusion d'options et aucune.
Marche pas. Si une ligne fait plus de 199 caractères, le comptage est faux. Il suffit de lire avec fgetc() et de compter les 'n'. Attention, si la dernière ligne n'est pas complète (pas de 'n'), elle n'est pas comptée.
Marche pas. Si une ligne fait plus de 199 caractères, le comptage est
faux. Il suffit de lire avec fgetc() et de compter les 'n'. Attention,
si la dernière ligne n'est pas complète (pas de 'n'), elle n'est pas
comptée.
Marche pas. Si une ligne fait plus de 199 caractères, le comptage est faux. Il suffit de lire avec fgetc() et de compter les 'n'. Attention, si la dernière ligne n'est pas complète (pas de 'n'), elle n'est pas comptée.