for循环比循环条件接受一个额外的值

时间:2019-04-14 10:09:13

标签: c arrays for-loop scanf

我编写了一个程序,该程序接受用户的值,然后在for循环中迭代该值。在for循环中,我接受要存储在数组中的数字。 我的问题是for循环所接受的值比用户指定的值多。

int main()
{
  int  i = 0;
  int  a;
  int no_of_boxcars = 0;
  double array[10];
  double boxcart_wt = 0;
  //printf("Enter the no of wagons");
  scanf_s("%d", &no_of_boxcars);        // no of boxcars
  for (i = 0; i<=no_of_boxcars;++i)
  {
    printf("%d \t", i);
    scanf_s("%lf ", &boxcart_wt);   //weight in boxcar

    array[i] = boxcart_wt;
  }
}

如果用户输入3,则应该接受3个值

for (i = 0; i<no_of_boxcars;++i)
{
  //but here accepts 4 values
}

如果用户输入3,则应该接受4个值,如果

for (i = 0; i<=no_of_boxcars;++i)
{
  //and here accepts 5 values
}

2 个答案:

答案 0 :(得分:1)

C中的索引从 _getData() async{ FirebaseUser user = await FirebaseAuth.instance.currentUser(); String uid = user.uid.toString(); var snapshots = Firestore.instance.collection('userinfo').document(uid).snapshots(); return snapshots; } @override Widget build(BuildContext context) { return new Scaffold( appBar: AppBar( title: Text('Retrieve Text Input'), ), body: new Container( padding: EdgeInsets.only(top: 20.0, left: 10.0, right: 10.0), child: new StreamBuilder( stream: _getData(), builder: (context, snapshot) { if (snapshot.hasData) { var userDocument = snapshot.data; return new Column( children: <Widget>[ TextFormField( initialValue: userDocument["name"].toString(), //controller: _AdContr, decoration: new InputDecoration( labelText: 'Name', fillColor: Colors.white, border: new OutlineInputBorder( borderRadius: new BorderRadius.circular(25.0), borderSide: new BorderSide(), ), //fillColor: Colors.green ), ), SizedBox(height: 20), TextFormField( //initialValue: Text(userDocument["Surname"]).toString(), //controller: _AdContr, decoration: new InputDecoration( labelText: 'Surname', fillColor: Colors.white, border: new OutlineInputBorder( borderRadius: new BorderRadius.circular(25.0), borderSide: new BorderSide(), ), //fillColor: Colors.green ), ) ], ); } }), ), ); } 开始。在您的for循环中,您从0..n-1开始,那太多了。更改

0..n

for (i = 0; i<=no_of_boxcars;++i)

答案 1 :(得分:0)

scanf格式的空格匹配 any 空格和任意数量的连续空格。

尾随空格的问题是scanf必须继续读取,直到它读到不是空格的东西为止,否则它将不知道空格何时结束

这导致您需要提供一些额外的非空白输入的问题。

对于除两种格式("%c""%[")以外的所有格式,scanf函数都会自动读取并丢弃前导空白。因此,通常不需要在格式字符串中包含空格。也许这两种格式不会跳过空格。

阅读例如this scanf (and family) reference了解更多详情。