用户输入如何从多维变成一维?

时间:2018-07-04 04:50:29

标签: c++ arrays scanf

scanf()函数的异常行为。

#include<bits/stdc++.h>
using namespace std;

char c[100][100];
int main()
{
    for(int i=1;i<=10;++i) scanf("%s",c[i]+1);
}

我的问题是,由于我们将c声明为2维,arrayscanf如何只接受一维输入,而没有任何编译{{1} }?

https://ideone.com/954oeO

第二个参数是否有一些默认值?

1 个答案:

答案 0 :(得分:1)

由于数组->指针转换,

c[i]&c[i][0]相同。
c[i] + 1&c[i][1]相同。

因此,请使用

scanf("%s", c[i]+1);
从句法的观点来看

是有效的。

但是,请记住,如果输入太大而无法适合给定位置,则会遇到访问数组超出有效范围的问题。最好使用

scanf("%98s", c[i]+1);

c[i]+1处有99个字符。您需要为终止的空字符留出空间。因此,使用%98s