en C y'a pas vraiment de booléens, juste 0 pour false et tout le reste pour true
toute affectation "retourne" une valeur, celle qui a été affectée à la variable à gauche de l'expression, ainsi (i=6) vaut 6, ce qui autorise a=(b=6) pour donner a=6 et b=6
l'expression suivant un && n'est évaluée que si l'expression située avant est true (!= 0)
l'expression suivant un || est évaluée quelque soit la valeur de l'expression située avant
Ainsi:
!( *(file+length-4)=0 ) remplace le dernier '_' par '0円' et renvoie !0 donc true, atoi(&file[4]) renvoie true uniquement si la séquence est un chiffre non nul, et !( *(file+length-4)='_' ) remet en place le '_' en renvoyant false pour ne pas interférer dans le résultat de atoi().
A+, Jay
# C
Posté par Jay . En réponse au message traitement selon le nom du fichier. Évalué à 1.
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <dirent.h> int main(int argc, char **argv) { struct dirent* entry; DIR* directory; char* file; int length; if(directory = opendir(".")) { while(entry = readdir(directory)) { printf("%s\t\t", (file=entry->d_name)); length = strlen(file); if(length==12 && !strncmp(file,"FFF_",4) && !strncmp(&file[length-4],"_tmp", 4) && !( *(file+length-4)=0 ) && (atoi(&file[4]) || !( *(file+length-4)='_' ))) { // traitement sur le fichier ici ... printf("OK\n"); } else { printf("BAD\n"); } } closedir(directory); } return 0; }Quelques explications (si nécessaires):- en C y'a pas vraiment de booléens, juste 0 pour false et tout le reste pour true
- toute affectation "retourne" une valeur, celle qui a été affectée à la variable à gauche de l'expression, ainsi (i=6) vaut 6, ce qui autorise a=(b=6) pour donner a=6 et b=6
- l'expression suivant un && n'est évaluée que si l'expression située avant est true (!= 0)
- l'expression suivant un || est évaluée quelque soit la valeur de l'expression située avant
Ainsi: !( *(file+length-4)=0 ) remplace le dernier '_' par '0円' et renvoie !0 donc true, atoi(&file[4]) renvoie true uniquement si la séquence est un chiffre non nul, et !( *(file+length-4)='_' ) remet en place le '_' en renvoyant false pour ne pas interférer dans le résultat de atoi(). A+, Jay