给定输入,如:

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/

10-12 23:12