【问题标题】:Problems with file I/O in CC 中的文件 I/O 问题
【发布时间】:2010-12-07 14:29:49
【问题描述】:

我很抱歉我的英语不好,但我会尽力解释我的问题。 使用 C,我想输出 IP 地址列表。

但是,当我打开 .txt 文件时,它看起来是空白的。我也尝试在 stderr 上打印,但我根本没有输出。有什么问题?似乎没有执行for 循环。

这是代码。 (将打印从 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;
}

【问题讨论】:

    标签: c file-io printf


    【解决方案1】:

    错别字?

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

    您有一个j,而k 应该是。

    【讨论】:

    • @user533780:接受可以解决您的问题的答案是个好主意。这是礼貌的做法,也可以防止其他人浪费时间查看已经接受了答案的问题。
    【解决方案2】:

    由于 to_next() 函数的编写方式,如果任何结束变量设置为 255,您的 for 循环将永远不会终止。

    但是,由于最终值始终设置为较小的值,因此您不需要 to_next 函数。我建议改成更正常的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多