如何使用scanf跳过标准输入的一部分?

时间:2014-04-13 23:56:05

标签: c

我正在写一个c程序,我的标准输入看起来像这样。

2
1 3 4
6 9 1
3 6 0
3 5 1
2 6 1

我的c程序将第一个数字存储在名为rowToConsider的变量中。然后,我将rowToConsider行(0索引)的数字读入数组nums

#include<stdio.h>

int main() {
  int rowToConsider;
  int nums[3];

  scanf("%d", &rowToConsider);

  for (int i = 0; i < rowToConsider; i++) {
    // My attempt to read a row into nothing. Basically, just skip the row.
    scanf("%d %d %d");
  }

  scanf("%d %d %d", nums, nums + 1, nums + 2);  
}

然而,for循环中的scanf触发了分段错误。

在读取3个整数的数组之前,如何跳过某些行?

3 个答案:

答案 0 :(得分:5)

你得到一个段错误,因为你第一次调用scanf还需要3个参数。

您可以使用*指定可选参数,例如scanf("%*s");将读取一个字符串并将其丢弃。

来自scanf手册页:

  

可选&#39; *&#39;赋值抑制字符:scanf()按转换规范的指示读取输入,但丢弃输入。不需要相应的指针参数,此规范不包含在scanf()返回的成功分配计数中。

答案 1 :(得分:1)

要使用scanf,您需要一个用于扫描的函数的地址指针。我相当肯定你会得到一个错误,因为我不相信你被允许使用没有地址的格式化器来放置结果。我只需将它们放在numsnums + 1nums + 2中,因为它们会被您想要的行覆盖。

答案 2 :(得分:0)

我建议你不要使用循环!!我的意思是它什么也没做,因为你知道在哪里存储你的行输入(nums, nums+1, nums+2)