我正在写一个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个整数的数组之前,如何跳过某些行?
答案 0 :(得分:5)
你得到一个段错误,因为你第一次调用scanf还需要3个参数。
您可以使用*
指定可选参数,例如scanf("%*s");
将读取一个字符串并将其丢弃。
来自scanf
手册页:
可选&#39; *&#39;赋值抑制字符:
scanf()
按转换规范的指示读取输入,但丢弃输入。不需要相应的指针参数,此规范不包含在scanf()
返回的成功分配计数中。
答案 1 :(得分:1)
要使用scanf
,您需要一个用于扫描的函数的地址指针。我相当肯定你会得到一个错误,因为我不相信你被允许使用没有地址的格式化器来放置结果。我只需将它们放在nums
,nums + 1
和nums + 2
中,因为它们会被您想要的行覆盖。
答案 2 :(得分:0)
我建议你不要使用循环!!我的意思是它什么也没做,因为你知道在哪里存储你的行输入(nums, nums+1, nums+2)