这是我的代码:
void fun1(char data[2][10]);//function prototype
int i, j; char data[2][11];//variables
for (i = 0; i < 2; i++)//populating the 2D array of chars
{
for (j = 0; j < 11; j++)
{
scanf("%c", &data[i][j]);
}
}
fun1(data);
void fun1(char data[2][10])//function to print the array out
{
int i, j, sum;
printf("\n");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 11; j++)
{
printf("%c", data[i][j]);
}
}
}
这是我的输入和输出:
(inputs)
aaabbbccce
aaabbbccce
(outputs)
aaabbbccce
aaabbbccce
我的问题是,为什么在我没有指定输出时输出中有换行符? 顺便问一下,如果我的函数参数与我的数组的大小不匹配,这样可以吗?就像我的数组是char数据[2] [11],我传入的参数是char数据[2] [10]。
答案 0 :(得分:4)
将所有'11'更改为'10'
您将fun1()
声明为void fun1(char data[][10])
,但为其提供了char [][11]
类型的参数。
将scanf("%c", ...)
更改为scanf(" %c", ...)
%
之前的空格会忽略输入中的空白字符,例如换行符。
您的输入
aaabbbccce(enter)
aaabbbccce(enter)
包括22个字符,而不是21个字符。第一个'e'之后的(enter)应该被忽略。
如果您使用scanf("%c", ...)
来阅读输入,则应提供类似
aaabbbccceaaabbbccce(enter)
到您的计划。
答案 1 :(得分:0)
您应该将循环限制从11更正为10。 你应该在两个函数中都这样做。但是在fun1()中这样做就足够了。
答案 2 :(得分:0)
如果你的函数参数与数组大小不匹配,我认为没关系,至少你不会得到你想要的。 我们知道,当你使用数组作为参数时,实际上调用函数将其数组的第一个地址(也就是数组的变量名)传递给被调用函数,而被调用函数接收第一个地址作为其参数的地址,因此这两个参数都是分享同样的记忆。 C允许这样做,但您可能会看到警告消息。