所以我试图解决一个问题,我的问题是:
首先我有一个输入 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/