如何一次性获取2d字符串的所有元素的输入?

时间:2015-07-06 10:19:04

标签: c arrays string multidimensional-array user-input

我想将数据存储在2d字符串中。传统方式是:

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"}

2 个答案:

答案 0 :(得分:5)

实现这一目标的最优雅方式是,

  1. 使用fgets()阅读输入。
  2. 使用strtok()
  3. 进行令牌化
  4. 在有效性检查后,将令牌存储在数组元素中。
  5. 这样,你有很多优点,比如

    • 如果使用固定大小的数组,您可以摆脱size的单独用户输入的问题。你只能继续对整个输入进行标记,直到数组元素存在。
    • 执行输入值的有效性检查(使用strlen(),也许)
    • 您可以灵活地使用没有预先确定大小的数组并使用动态内存分配,您可以根据输入的数量(和大小)分配和调整数组的大小, (如果你愿意的话)。

答案 1 :(得分:0)

scanf()无论你使用&#39; \ n&#39;(键盘键入)还是空格来分隔输入它都会以相同的方式工作。标准定义是任何空格可以分开ino

也就是说,如果你把输入作为 -

Hey
I 
Am
New
Here

或作为 -

 Hey I am new here

它总是将它们存储为{&#34;嘿&#34;,&#34;我&#34;,&#34;我&#34;,&#34;新&#34;,&#34;这里&#34;}