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

问题描述 投票:0回答:1

我正在尝试将符号(#,*和。)输入到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中的输入格式,输出格式和一些输入输出示例这是一张图片,但是我还不能发布图片,所以我把它放在了链接中。

c++ matrix char stdio
1个回答
0
投票

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

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

将从输入中读取由空格分隔的字符串,然后尝试将其存储为单个字符。由于字符串将始终至少包含两个字符(包括终止符NUL),因此它将始终超出其空间。通常,这将是无害的(只是覆盖A [i] [j + 1]等),但是如果您使用全宽度,它将给出不确定的行为。

您可能真正想要的是

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

将跳过任何空白(例如,输入的前一行换行),然后读取单个非空白字符。 “跳过空白”行为来自格式字符串开头的显式空间。

如果您想要跳过所有空格(例如,要在矩阵中允许使用空格字符),则只需要手动跳过换行符(您可能不想在其中您的矩阵),而不是空格。可以通过内部循环中的第二个scanf调用来完成]

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

这两个不能合并为一个调用,因为如果没有换行符,第一个将失败(不执行任何操作)。>>

您在打印循环中有相同的字符/字符串混淆,因此,您还需要在那里也将%s更改为%c

© www.soinside.com 2019 - 2024. All rights reserved.