如何一次输入二维字符串的所有元素?

How to take input for all the elements of a 2d string at one shot?

我想将数据存储在二维字符串中。传统的方式是:

char arr[20][20];
int i;
int size;
scanf("%d",&size);
for(i=0;i<size;i++)
 scanf("%s", arr[i]);

这样我会输入:

Hey
I 
Am
New
Here

我想输入:嘿,我是新来的 数组应该有:a[20][20]={"Hey","I","am","new","here"}

最优雅的实现方式是,

  1. 使用fgets()读取输入。
  2. 使用 strtok()
  3. 进行标记化
  4. 在有效性检查后,将令牌存储在数组元素中。

这样,你有很多好处,比如

  • 如果完全使用固定大小的数组,您可以解决 size 的单独用户输入问题。您只能继续标记整个输入,直到数组元素出现为止。
  • 执行输入值的有效性检查(可能使用 strlen()
  • 您可以灵活地不使用预先确定大小的数组并使用动态内存分配,您可以根据数量(和输入的大小),(如果需要)。

对于 scanf() 无论您使用 '\n'(键盘输入)还是空格来分隔输入都没有关系,它的工作方式相同 way.The 标准定义的是任何空格都可以单独的 ino

也就是说,如果您将输入作为-

Hey
I 
Am
New
Here

或-

 Hey I am new here

它将始终将它们存储为 {"Hey","I","am","new","here"}