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

时间:2018-01-08 16:34:52

标签: c

所以我试图解决问题,我的问题是: 首先,我有一个输入n =2:,它确定我有多少测试用例。假设m,则下一个输入为m =4 : - 这是以下序列中有多少个数字。假设1 0 3 5

下一个输入是一个序列示例:m。接下来我得到另一个m和另一个序列,依此类推。所以我需要输入n及其序列scanf次....我不能用https://graph.facebook.com/{fanpageId}/posts?access_token={token}&fields=application,created_time,likes.summary(true),comments.summary(true),shares,name,link,from,type,picture&limit=100 来做。

看看problem,了解我的意思。

1 个答案:

答案 0 :(得分:4)

我猜你不会得到你应该在这里做的事情。您将首先获得一些测试用例,然后您将为每个测试用例完成工作。

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[]
  }

}

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

这里我们基本上按块处理输入块。最初我们得到了测试用例的数量,然后我们正在while个循环运行n次。在每次迭代中,我们首先得到输入m,然后在得到输入后处理序列的m个数。

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