在包含新行的重复命令之后,有没有办法在没有新行的情况下结束代码?

Is there a way to end the code without a new line after a repeat commnad that contains a new line inside it?

所以我写了一个代码来计算两个矩阵的乘法。 该程序通过产生正确的结果来完成它的工作。我在下面提供了大部分输出功能:

   for (i = 0; i < row; ++i) 
    {
      for (j = 0; j < column; ++j) 
        {
            printf("%d ", result[i][j]);
            if (j == column -1)
            printf("\n"); 
        }
    }

最后两行有助于正确显示结果,例如:

xxx xx
x -xx
x x

其中 x 代表整数。 我要如何在没有新行的情况下结束程序?例如:

xxx xx
x -xx
x xPress any key to continue...

而不是我现在得到的:

xxx xx
x -xx
x x
Press any key to continue...

提前致谢。

要在没有换行的情况下结束,停止在末尾打印换行。

   for (i = 0; i < row; ++i) 
    {
      for (j = 0; j < column; ++j) 
        {
            printf("%d ", result[i][j]);
            if (i != row -1 && j == column -1)
            printf("\n"); 
        }
    }

结束也没有 space,停止在最后打印 space。

   for (i = 0; i < row; ++i) 
    {
      for (j = 0; j < column; ++j) 
        {
            printf(i == row -1 && j == column -1 ? "%d" : "%d ", result[i][j]);
            if (i != row -1 && j == column -1)
            printf("\n"); 
        }
    }

如果你想在没有结尾的情况下结束你的输出 \n 那么不要在每行的末尾打印它。您可以在开头打印它(好吧,这将使您的输出始终在开头有一个空行)或更好,行之间。例如:

char *sep = "";
while(whatever_you_like_to_test_to_continue_the_test) {

    /* the separator has been initialized to the empty string, so it will
     * print nothing the first time. */
    printf("%s", sep);

    /* now we change it, to whatever we like to use */
    sep = "\n";

    /* print the body of what you want to print */
    printf("....", ...);
}
/* when you reach here, the last part you wrote was the body, not the separator */

例如,在您的示例代码中,您可以用每一行的一对括号装饰矩阵的元素,一个 return 行并将所有内容放在另一对括号中,如下所示:

#include <stdio.h>
int main() {
        int rows = 10, i, cols = 6, j, number = 0;

        char *sep1 = "{";
        for (i = 0; i < rows; ++i) {
                printf("%s", sep1);
                sep1 = ",\n ";
                char *sep2 = "{";
                for (j = 0; j < cols; ++j) {
                        printf("%s", sep2);
                        sep2 = ",";
                        printf("%3d", number++);
                }
                /* this ends the row */
                printf("}");
        }
        printf("}"); /* the last bracket, and no newline */
} /* main */

将产生:

$ ./a.out
{{  0,  1,  2,  3,  4,  5},
 {  6,  7,  8,  9, 10, 11},
 { 12, 13, 14, 15, 16, 17},
 { 18, 19, 20, 21, 22, 23},
 { 24, 25, 26, 27, 28, 29},
 { 30, 31, 32, 33, 34, 35},
 { 36, 37, 38, 39, 40, 41},
 { 42, 43, 44, 45, 46, 47},
 { 48, 49, 50, 51, 52, 53},
 { 54, 55, 56, 57, 58, 59}}$ _
for (i = 0; i < row; ++i) 
{
    if (i != 0)
        printf("\n");
    for (j = 0; j < column; ++j) 
    {
        if (j != 0)
            printf(" ");
        printf("%d", result[i][j]);
    }
}

在循环之外做一些事情,之前而不是之后。

asnwer 是微不足道的,重点是以测试机器可接受的方式呈现输出,这意味着在每一个新行结束后必须没有 space 才能让测试被通过。我在理解它背后的逻辑时遇到了一些麻烦,但最终在经过一番搜索、上面的一些帮助和一天的反复试验后,我弄明白了。

for (i = 0; i < row; ++i)
    {
        for (j = 0; j < column; ++j)
        {
            printf(j == column -1  ? "%d" : "%d ", result[i][j]);
            if (i != row -1 && j == column -1)
                printf("\n");
        }
    }