2010-12-07 33 views
0

Je suis désolé pour mon mauvais anglais, mais je vais essayer d'expliquer mon problème. En utilisant C, je veux faire une sortie d'une liste d'adresses IP. Mais lorsque j'ouvre le fichier .txt, il semble vide.Problèmes avec le fichier I/O en C

J'ai essayé d'imprimer sur stderr aussi, mais je n'ai pas de sortie du tout. Quel est le problème? Il semble que les boucles for ne soient pas exécutées.

Voici le code. (imprimerait adresses de 192.168.51.1 à 192.168.51.254)

#include <stdio.h> 
#define B1_S 192 
#define B1_E 192 
#define B2_S 168 
#define B2_E 168 
#define B3_S 51 
#define B3_E 51 
#define B4_S 1 
#define B4_E 254 
#define FNAME "ip.txt" 
#define MIN_RANGE 0 
#define MAX_RANGE 255 

void to_next(int *x); 

main() 
{ 
    FILE *fp; 
    int i, j, k, l; 
    if(fp = fopen(FNAME, "w")) 
    { 
    for(i=B1_S; i<=B1_E; to_next(&i)) 
     for(j=B2_S; j<=B2_E; to_next(&j)) 
     for(k=B3_S; j<=B3_E; to_next(&k)) 
      for(l=B4_S; l<=B4_E; to_next(&l)) 
      fprintf(fp, "%d.%d.%d.%d\n", i,j,k,l); 
    fclose(fp); 
    } 
    else 
    printf("Error opening file.\n"); 
} 

void to_next(int *x) 
{ 
    if(*x < MAX_RANGE) 
    *x+=1; 
    else 
    *x = MIN_RANGE; 
} 

Répondre

6

Typo?

  for(k=B3_S; j<=B3_E; to_next(&k)) 

Vous avez un jk devrait être.

+0

Oh, putain. Je suis tellement stupide. >< – user533780

+0

Merci beaucoup. Je vais mieux lire mon code. – user533780

+0

@ user533780: C'est une bonne idée d'accepter une réponse qui résout votre problème. C'est poli et empêche également d'autres personnes de perdre du temps à examiner des questions qui ont déjà une réponse acceptée. – AlastairG

0

En raison de la façon dont votre fonction to_next() est écrit, votre pour les boucles ne se terminera jamais si l'une des variables de fin est réglé sur 255.

Cependant, parce que les valeurs finales sont toujours à quelque chose de plus petit que vous n'avez pas besoin de la fonction to_next. Je recommande de changer à la plus normale:

for(i=B1_S; i<=B1_E; ++i)