c/c++语言开发共享一旦输入已经在C中获得,则忽略该行的其余部分

给出如下输入:

6 2 1 2 3 4 5 6 4 3 3 4 5 6 

第一行中的第一个数字是行中的变量数,第二个是行数。 如何才能获得前n/2值,其中n是一行中的值的数量并跳到下一行?

    我很惊讶没有人提到fscanf("%*d")*符号告诉fscanf读取整数值,但要忽略它(请参阅此处的文档)。 这可以让你做类似的事情:

     int numbers[MAX_NUMS]; int n = numbers_in_line(); for( i = 0; i < n; i++ ) if(i 

    这看起来比仅仅阅读其余的字符更清晰。 如果你提前知道,你也可以写:

     scanf("%d %d %d %*d %*d %*d",&numbers[0],&numbers[1],&numbers[2]); 

    您没有直接询问此问题,但如果您正在阅读二进制数据,则还有一种方法可以跳过其余部分。 你可以读取你想要的数据,然后计算下一行开头的位置(这里有一些指针算法)并使用fseek函数跳转到那个位置,这可以节省一些I / O时间。 遗憾的是,您无法使用ASCII数据执行此操作,因为数字不会占用统一的空间量。

    如果输入长度不变(例如,6个数字,如您的示例),您可以使用以下方法读取所需的输入:

     scanf("%d %d %d", ...); 

    然后,处理剩下的输入:

     while ((ch = getchar()) != 'n' && ch != EOF); 

    如果输入长度确实不同,则必须将其读入缓冲区。 然后你可以遍历字符串以找到其中的空格数(So n = spaces + 1),然后使用strtok n / 2次再次迭代以获得前n / 2个数字。

    以前,你知道一行中有多少个数字? 如果你的答案是肯定的,我建议你试试这个:

     int n = numbersInALine(); int i = 0; int *numbers = (int*) malloc( sizeof( int ) * ( n / 2 ) ); for( i = 0; i < n/2; i++ ) scanf( "%d", &numbers[i] ); 

      以上就是c/c++开发分享一旦输入已经在C中获得,则忽略该行的其余部分相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/544939.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐