如何使用sscanf从字符串(从文件读取)直接输入整数值?

时间:2018-11-22 03:17:45

标签: c io scanf

我正在尝试编写一段代码,以读取PPM文件的“标题”。 例如:

P3
400200
255

在这种情况下,宽度为400,高度为200,最大颜色值为255。我试图将这些字符串值分配为整数,但我认为有一种更好的方法来减少行数并增加行数“更安全。”如何避免必须使用atoi()函数? (请注意,我已经在“ ACTUAL代码”中添加了“检查文件是否可打开部分,这只是减少的代码段)

  char buffer[200];
  char height[200];
  char width[200];
  char maxColour[200];

  FILE *file = fopen("mcmaster.ppm", "r");

  fgets(buffer, sizeof(buffer), file); // File format line

  fgets(buffer, sizeof(buffer), file); // Width x height line
  sscanf(buffer, "%s %s", width, height);

  fgets(buffer, sizeof(buffer), file); // Max colour line
  sscanf(buffer, "%s", maxColour);

  int actHeight = atoi(height);
  int actWidth = atoi(width);
  int actMaxColour = atoi(maxColour);

1 个答案:

答案 0 :(得分:-2)

我建议您使用fscanf而不是sscanf。首先,定义“错误功能”以验证读取文件的问题,

void fscanf_Error(char *file)
{
    fprintf(stderr,"Error reading file: %s\n. Exiting(1).\n ",file);
    exit(1);
}

然后

  char dummy[12];
  if(!fscanf(file, "%s\n", dummy))
      fscanf_Error(file);
  if(!fscanf(file," %d %d\n", width, height))
      fscanf_Error(file);
  if(!fscanf(file, "%d\n", maxColour))
      fscanf_Error(file);