创建字符矩阵并将其旋转 180 度

Creating Matrix of Chars and Rotate it 180 degrees

我正在尝试将符号(#、* 和 .)输入到 N 行 N 列的矩阵中。

我试过这个 link 中的代码,它确实旋转了矩阵,但我不知道如何将输入从 int 更改为 chars(符号)。

这是我当前的代码,但它不起作用。

    m=n; //row and columns value are the same
    printf("No of columns: %d\n", m);

    if (n>100 || m>100) //break if n or m values is more than 100
    return 0;

    printf("Enter the elements in the array:\n");
    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            scanf("%s",&A[i][j]);
        }
    }

    //store the elements in rotated matrix by iterating through all the elements in the marix 
    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            rotatedA[i][j] = A[n-i-1][m-j-1];
        }
    }

    //print out the new matrix rotated by 180 degrees
    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            printf("%s ",rotatedA[i][j]);
        }

    }


}

这是我作业中的输入格式、输出格式和一些输入输出示例Formats and Examples 这是一张图片,但我还不允许 post 图片,所以我将它放在 link.

您似乎混淆了字符和字符串。你有行

scanf("%s",&A[i][j]);

从输入中读取一个白色 space 分隔的字符串,然后尝试将其存储在单个字符中。因为字符串总是至少有两个字符(包括终止符 NUL),所以这总是会超过 space。大多数情况下这将是无害的(只是覆盖 A[i][j+1] 等),但如果你使用全宽度,它会产生未定义的行为。

您可能真正想要的是

scanf(" %c", &A[i][j]);

这将跳过任何白色space(例如,来自上一行输入的换行符),然后读取单个非白色space 字符。 'skip whitespace' 行为来自格式字符串开头的显式 space。

如果您不想跳过所有白色space(例如,想要在您的矩阵中允许 space 个字符),您'将需要手动跳过换行符(您可能不希望在矩阵中这样做),而不是 spaces。这可以通过内部循环中的第二个 scanf 调用来完成

scanf("%*[\n]");   /* discard newlines */
scanf("%c", &A[i][j]);

这两个不能组合成一个调用,因为如果没有换行符,第一个调用将失败(并且什么也不做)。

您在打印循环中有同样的 character/string 混淆,因此您还需要将 %s 更改为 %c