0

当给定的输入格式为时如何在c中读取文件

4
5
3
a,b
b,c
c,a

请帮助...这是我的文件扫描功能。这里 m 应该存储 4,n 应该存储 5,l 应该存储 3。然后 col1 将存储{abc},col2 将存储{bca} mn,l 是 int。col1 和 col2 是 char 数组文件的第三行表示一个值 3 ,表示它下面有三行,它包含 3 对字符。

i = 0, j = 0;
while (!feof(file))
{
  if(j==0)
  {
    fscanf(file,"%s\t",&m);
    j++;
  }
  else if(j==1)
  {
    fscanf(file,"%s\t",&n);
    j++;
  }
  else if(j==2)
  {
    fscanf(file,"%s\t",&l);
    j++;
  }
  else
  {
    /* loop through and store the numbers into the array */
    fscanf(file, "%s%s", &col1[i],&col2[i]);
    i++;
  }
}

但我的结果没有出来,请告诉如何进行....

4

2 回答 2

2

几点建议:

  1. 不要使用feof(),这样的代码永远不需要它。
  2. 一次读一整行,用fgets().
  3. 然后使用 eg 解析该行sscanf()
  4. 检查I/O 函数的返回值,它们可能会失败(例如在文件末尾)。
于 2013-09-16T13:59:54.363 回答
2

更新以允许读取可变数量的行

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  int value1, value2, value3, i;
  char *col1, *col2;
  char lineBuf[100];
  FILE* file;

  file = fopen("scanme.txt","r");

  fgets(lineBuf, 100, file);
  sscanf(lineBuf, "%d", &value1);
  fgets(lineBuf, 100, file);
  sscanf(lineBuf, "%d", &value2);
  fgets(lineBuf, 100, file);
  sscanf(lineBuf, "%d", &value3);

  // create space for the character columns - add one for terminating '\0'
  col1 = calloc(value3 + 1, 1);
  col2 = calloc(value3 + 1, 1);

  for(i = 0; i < value3; i++) {
    fgets(lineBuf, 100, file);
    sscanf(lineBuf, "%c,%c", &col1[i], &col2[i]);
  }
  fclose(file);

  printf("first three values: %d, %d, %d\n", value1, value2, value3);
  printf("columns:\n");
  for (i = 0; i < value3; i++) {
    printf("%c  %c\n", col1[i], col2[i]);
  }

  // another way of printing the columns:
    printf("col1: %s\ncol2: %s\n", col1, col2);
}

我没有执行任何通常的错误检查等 - 这只是为了演示如何读取内容。这会产生预期的输出以及您拥有的测试文件。我希望你能从这里拿走它。

于 2013-09-16T14:14:26.877 回答