2011-06-02 1 views
-2

Je dois séparer les valeurs par une virgule dans chaque cas, mais la dernière. Divers messages suggèrent d'utiliser for au lieu de foreach, mais comme cela est un patch, et je ne pas utiliser C, comment puis-je convertir foreach_point(t->board) à une boucle for?C: comment convertir foreach_point (t-> carte) en boucle?

+1

Cette question vise-t-elle à clarifier les articles précédents? Lesquels? Pouvez-vous fournir un peu plus de détails pour permettre à la communauté de mieux vous aider? – Greg

Répondre

1

Il est fondamentalement la même syntaxe que pour une boucle en C#:

for (int i = 0; i < NUM_ELEMENTS; i++) 
{ 
    t->board[i] ... 
} 

Vous aurez besoin de connaître NUM_ELEMENTS, évidemment!

+0

N'existe-t-il pas de test pour la longueur – peepo

+0

@peepo: Si 't-> board' est un pointeur sur une mémoire allouée (c'est-à-dire un tableau" dynamique "), alors non. –

0

Je ne sais pas ce que foreach_point fait, mais si j'avez bien deviné, je fais quelque chose comme:

printf("%d", t_board[0]);   /* print the 1st element */ 
for (k = 1; k < NUM_ELEMENTS; k++) { /* notice `k = 1`, not the usual `k = 0` */ 
    printf(", %d", t_board[k]); 
} 
puts(""); 
0

Ceci est en fait responsable.

CCAN (pensez CPAN, mais pour C) does have a foreach module cela fonctionnerait probablement pour vous. Notez, Rusty Russel (l'un des principaux pirates du noyau Linux) maintient CCAN, ces liens sont très peu susceptibles de disparaître à l'avenir.

est ici la mise en œuvre (directement à partir du lien, c'est un exemple trivial):

// Figure out how to get usage: message out of a program. 
    #include <ccan/foreach/foreach.h> 
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    #include <err.h> 

    // Returns true if program outputs "usage:" 
    static bool try_usage(const char *prog, const char *arg) 
    { 
     char *command; 
     FILE *in; 
     int status; 

     command = malloc(strlen(prog) + 1 + strlen(arg) + 1 + 
       sizeof("</dev/null 2>&1 | grep -qiw usage:")); 
     sprintf(command, "%s %s </dev/null 2>&1 | grep -qiw usage:", 
      prog, arg); 
     in = popen(command, "r"); 
     if (!in) 
      err(2, "running '%s'", command); 
     status = pclose(in); 
     free(command); 
     return (WIFEXITED(status) && WEXITSTATUS(status) == 0); 
    } 

    int main(int argc, char *argv[]) 
    { 
     const char *arg; 

     if (argc != 2) 
      errx(1, "Usage: %s <progname>\n" 
       "Figures out how to get usage message", argv[0]); 
     foreach_ptr(arg, "--help", "-h", "--usage", "-?", "") { 
      if (try_usage(argv[1], arg)) { 
       printf("%s %s\n", argv[1], arg); 
       exit(0); 
      } 
     } 
     printf("%s is unhelpful\n", argv[1]); 
     exit(1); 
    } 

Avec un peu de travail, cela devrait probablement faire ce que vous voulez.