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