用C印刷的自动换行

时间:2014-03-01 02:34:32

标签: c arrays newline

这是我的代码:

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]。

3 个答案:

答案 0 :(得分:4)

  1. 将所有'11'更改为'10'

    您将fun1()声明为void fun1(char data[][10]),但为其提供了char [][11]类型的参数。

  2. scanf("%c", ...)更改为scanf(" %c", ...)

    %之前的空格会忽略输入中的空白字符,例如换行符。

    您的输入

    aaabbbccce(enter)
    aaabbbccce(enter)
    

    包括22个字符,而不是21个字符。第一个'e'之后的(enter)应该被忽略。

    如果您使用scanf("%c", ...)来阅读输入,则应提供类似

    的输入
    aaabbbccceaaabbbccce(enter)
    

    到您的计划。

答案 1 :(得分:0)

您应该将循环限制从11更正为10。 你应该在两个函数中都这样做。但是在fun1()中这样做就足够了。

答案 2 :(得分:0)

如果你的函数参数与数组大小不匹配,我认为没关系,至少你不会得到你想要的。 我们知道,当你使用数组作为参数时,实际上调用函数将其数组的第一个地址(也就是数组的变量名)传递给被调用函数,而被调用函数接收第一个地址作为其参数的地址,因此这两个参数都是分享同样的记忆。 C允许这样做,但您可能会看到警告消息。