c - 如何在C语言中使用scanf输入未知数量的数字?

标签 c

所以我试图解决一个问题,我的问题是: 首先我有一个输入 n这决定了我有多少测试用例。假设n =2:那么下一个输入是 m - 这是以下序列中有多少个数字。假设m =4 :

下一个输入是序列示例:1 0 3 5 。接下来我得到另一个 m和另一个序列等等。所以我需要输入m及其序列n次......我无法用 scanf 做到这一点.

看看problem理解我的意思。

最佳答案

我猜你不明白你应该在这里做什么。您将首先获得测试用例的数量,然后您将为每个测试用例完成工作。

if(scanf("%d",&n)==1){
  while(n--){
    ..
    if( scanf("%d",&m) != 1){
       /* handle error */
    }
    ..
    for(size_t i = 0; i<m; i++){
      if( scanf("%d",&a[i])!= 1){
         /* handle error */
      }
    }
    ..
    // do work with array a[]
  }

}

一次提供所有输入并不意味着您必须将所有输入放在一起。我上面展示的方法是处理这些问题的常用方法。

这里我们基本上是逐 block 处理输入。最初,我们获取测试用例的数量,然后运行 ​​while 循环恰好 n 次。在每次迭代中,我们首先获取输入 m,然后在获取输入后处理序列的 m 个数字。

我在这里检查了 scanf 的返回值,以防出现 scanf 无法解析 int 并分配的任何错误它到其地址已传递给 scanf 的相应变量,那么我们可能会遇到错误情况,我们将处理它(最有可能通过显示消息并退出代码)。如果是 scanf - 它将返回扫描和分配的成功项目数。我们期望在每次调用时扫描 1 个数字并将其分配给已传递地址的变量。这就是这里正在做的事情。如果成功,它将返回 1

关于c - 如何在C语言中使用scanf输入未知数量的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48154412/

相关文章:

检查结构中的指针是否为 NULL

c - 删除空格-C 编程

c - 打印一个后如何停止循环?

代码块 12.11,MinGW

c - 为什么 %f 对于 print 语句中的大双数工作不正确?

c - 自由二维数组

c++ - 实现 memcmp

c 位操作(字节序)

c - 需要帮助了解编译器/HLL->程序集

c - 返回里面 if 和外面还是 in else?