给定输入,如:
6 2
1 2 3 4 5 6
4 3 3 4 5 6
第一个数字在哪里
第一行是行中的变量数,第二行是行数。
如何只获得第一个
n/2
值,其中 n
是一行中的值数并跳到下一行? 最佳答案
我很惊讶没有人提到 fscanf("%*d")
- *
符号告诉 fscanf
读取一个整数值,但忽略它(参见文档 here )。这使您可以执行以下操作:
int numbers[MAX_NUMS];
int n = numbers_in_line();
for( i = 0; i < n; i++ )
if(i<n/2)
fscanf("%d", &numbers[i]);
else
fscanf("%*d");
这似乎比仅读取其余字符更清晰。如果你提前知道
n
,你也可以这样写:scanf("%d %d %d %*d %*d %*d",&numbers[0],&numbers[1],&numbers[2]);
您没有直接询问这个问题,但是如果您正在阅读二进制数据,还有一种方法可以跳过该行的其余部分。你可以读取你想要的数据,然后计算下一行开头的位置(这里是一些指针算法)并使用
fseek
函数跳转到该位置,这可以节省一些 I/O 时间。不幸的是,您不能对 ASCII 数据执行此操作,因为数字不占用统一的空间量。关于c - 一旦在 C 中获得输入,就忽略该行的其余部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13518037/