在c中使用fscanf()读取多行

时间:2014-11-25 05:00:27

标签: c io

所以我试图弄清楚如何使用fscanf从文件中读取多行。 in文件如下所示:

8
1 8
1 7
1 9
1 8 
3 2
3 8
0 0
1 5
2 4
0 0

我想要获得的第一个数字将是我将要创建的数组的大小,因此我将其设置为n(在此示例中,该数字在开头为8)。 以下数字如下:最左边的数字将告诉我数组中的哪个索引我将在我创建的列表中排队最右边的数字。 零指示我将终止的位置。 到目前为止,我尝试这样做的方式是:

fscanf(in, "%d", &n)
//have obtained n
arr[n];
while( fgets(line, MAX_LEN, in) != NULL){
 fscanf(in, "%d %d", &x, &y);
 //from here I place them in their corresponding arrays
}

2 个答案:

答案 0 :(得分:0)

代码:

int main()
{
    int i,  j, k;

    scanf ("%d\n", &i);
        printf  ("%d\n", i);

    while (i){
    --i;
    scanf ("%d %d\n", &j, &k);
        printf  ("%d %d\n", j, k);

    }
}

执行:

./a.out  <input.txt

这是使用文件重定向。另请查看freopen。如果你使用它,你不必担心fscanf语法。如果您只考虑fscanf,那么Google中有很多例子。请参考。

答案 1 :(得分:0)

1)在fgets()之后立即使用fscanf(in, "%d", &n)'\n'中离开第一行的stdin并且只读取一条短线。建议避免将fgets()fscanf()混合使用。

2)使用fgets()阅读该行(好主意)后,使用sscanf()(或strtol())阅读数字,而不是fscanf()

if (fgets(line, MAX_LEN, in) == NULL) Hanlde_EOF();
if (sscanf(line, "%d", &n) != 1) Handle_BadInput();
arr[n];
while(fgets(line, MAX_LEN, in) != NULL){
  if (sscanf(in, "%d %d", &x, &y) != 2) Handle_BadData();
  ...
}