【问题标题】:automatic newline printed in C用 C 打印的自动换行符
【发布时间】:2014-03-01 02:34:32
【问题描述】:

这是我的代码:

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 data[2][11],我传入的参数是char data[2][10]。

【问题讨论】:

  • 输入aaabbbccce后,您是否可能按回车键?
  • 是的,我输入了:aaabbbccce(回车)aaabbbccce(回车)
  • 当您输入“enter”时,您指定了一个换行符。输入 = 换行符。

标签: c arrays newline


【解决方案1】:
  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)
    

    到你的程序。

【讨论】:

    【解决方案2】:

    您应该将循环限制从 11 更正为 10。 您应该在这两个功能中执行此操作。但是在 fun1() 中这样做就足够了。

    【讨论】:

    • 好的,我试过了,它打印出 aaabbbccce aaabbbccc 最后一个'e'不见了
    • 在 j 变量的嵌套循环之后,在 fun1() 中的 i 变量循环内添加一个 printf("\n")。应该这样做。您是否更改了这两个函数的限制?
    • 是的,我在 fun1 和填充数组时更改了它
    • 您能说出您提供输入的准确程度吗?
    • 我输入“aaabbbccce”按回车,然后输入“aaabbbccce”然后按回车。我更改了循环限制,它解决了换行问题,但现在它不打印第二行中的最后一个 'e'
    【解决方案3】:

    如果你的函数参数与数组大小不匹配,我认为这是不行的,至少你不会得到你想要的。 众所周知,当你使用数组作为参数时,实际上调用函数将其数组的首地址(也就是数组的变量名)传递给被调用函数,而被调用函数接收首地址作为其参数的地址,所以两个参数共享相同的内存。 C 允许这样做,但您可能会看到警告消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多