【发布时间】:2019-07-07 08:28:29
【问题描述】:
累加。对于这个post,将文本存储在二维数组中的最常用方法是使用 %s 方法。但是,这种方法有一个缺点,即每当您按空格键时,键入的文本会进入数组的第二个元素。例如你输入了
输入:-
char 数组的第一个元素 = 大家好
输出:-
char 数组的第一个元素 = Hi
char 数组的第二个元素 = 每个人
预期输出:-
char 数组的第一个元素 = 大家好
所以,我想问一下为什么不能使用下面的书面方法将文本输入到二维数组中?
#include <stdio.h>
int main()
{
char ch[20];
printf("Enter name:");
scanf("%19[^\n]", ch);
printf("Your name is: %s", ch);
return 0;
}
如果上述方法可以使用,请告诉我如何使用?
请不要在回答这篇文章时引入指针概念/代码。这是一个理解上述书面方法为何失败的问题。
将此视为失败的代码:-
#include <stdio.h>
int main()
{
char name[4][20];
int i;
printf("Enter names:-\n");
for(i=0; i<4; i++)
{
printf("Enter name %d: ", i);
scanf("%19[^\n]", name[i]);
printf("\n");
}
for(i=0; i<4; i++)
{
printf("Entered name %d: %s", i, name[i]);
printf("\n");
}
return 0;
}
上述程序编译时没有任何错误或警告,但在运行时失败。
【问题讨论】:
-
对于例如的输入
Hi everyone,结果应该是什么?如果你有你的“2D”数组,它应该是什么样子,输入后它的内容应该是什么? -
“这是一个理解为什么上面写的方法失败的问题。” 它没有失败(至少对我来说没有),也不是二维数组。如果它没有按照您的预期工作,则需要更详细的问题描述。
-
@Someprogrammerdude 检查帖子,更新它。
-
@Gahlot,如果您想使用 0ne scanf 函数将“大家好”转换为“hi”和“每个人”在单独的字符串中的二维,那么它是可行的:char ch [2] [ 20]; scanf("%s %19[^\n]", ch[0], ch[1]);但不建议这样做,因为它可能会根据输入溢出数组。
-
此外,如果您想阅读 lines,为什么不使用
fgets代替呢?如fgets(name[i], sizeof name[i], stdin);
标签: c arrays multidimensional-array scanf