创建字符矩阵并将其旋转 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
。
我正在尝试将符号(#、* 和 .)输入到 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
。