求大佬帮忙,不懂为什么for循环中k-1输出结果就少了第4个元素和第8个元素
本帖最后由 不想起名字a 于 2022-9-7 18:33 编辑#include<stdio.h>
#include<string.h>
#define Max 1024
int main()
{
char a;
int length;
int i, j, k = 0;
gets(a);
length = strlen(a);
while(++k*k <= length);
char (*p) = (char(*))&a;
for(i = 0; i < k-1; i++)
{
for(j = 0; j < k-1; j++)
{
printf("%c ",p(i));//这里i处为"[]",会变成斜体字
}
printf("\n");
}
return 0;
}
然而想要矩阵输出需要使k的值减一 本帖最后由 不想起名字a 于 2022-9-7 16:07 编辑
当把for循环中的k-1换成k的时候输出结果是没有问题的,但是输出结果不是(k-1) * (k-1)的矩阵 while(++k*k <= length);这语句想表达什么呢?!看不懂啊 wp231957 发表于 2022-9-7 14:46
while(++k*k
k的平方大于length的时候结束while循环,由k-1得出矩阵的长度 不想起名字a 发表于 2022-9-7 15:15
k的平方大于length的时候结束while循环,由k-1得出矩阵的长度
这里不要使用复合语句,把k*k 和++k拆开写 wp231957 发表于 2022-9-7 15:17
这里不要使用复合语句,把k*k 和++k拆开写
while(k*k <= length)
k++;
这样写也不行,输入123456789 依然缺少4和8 你这是啥编译器呀
char (*p) = (char(*))&a;能通过编译?
{:10_257:} cnkizy 发表于 2022-9-7 15:40
你这是啥编译器呀
char (*p) = (char(*))&a;能通过编译?
可以啊 把一维数组强制转化为二维数组 我也是从小甲鱼的课后作业上才学到这个的 一个小建议。
while(++k*k <= length);容易导致UB
建议改成
while (k * k <= length)k++; cnkizy 发表于 2022-9-7 16:52
一个小建议。
while(++k*k
嗯嗯 谢谢 你是怎么通过编译的,我怎么通不过{:5_104:}
#include<string.h>
#define Max 1024
int main() {
char a;
int length;
int i, j = 0, k = 0;
gets_s(a, Max);
// 求长度
length = strlen(a);
// k = 求log(2,length)
while (k * k <= length)k++;
k--;
// 打印 k * k 方阵
for (i = 0; i < k; i++) {
for (; j <= (1+i)*(k-1); j++) {
printf("%c ", *((char*)a + i * sizeof(char) + j));
}
j--;
printf("\n");
}
return 0;
} gandixiwang 发表于 2022-9-7 18:08
你是怎么通过编译的,我怎么通不过
p[i] 是这样吗
如果是这样的话把 k-1 的-1 去掉就行了
代码
#include<stdio.h>
#include<string.h>
#define Max 1024
int main()
{
char a;
int length;
int i, j, k = 0;
gets(a);
length = strlen(a);
while(k*k < length)
k++;
char (*p) = (char(*))&a;
for(i = 0; i < k; i++)
{
for(j = 0; j < k; j++)
{
printf("%c ",p);//这里i处为"[]",会变成斜体字
}
}
return 0;
} 还有
while(++k*k <= length);
改成
while(k*k < length)
k++; cnkizy 发表于 2022-9-7 18:17
感谢感谢,膜拜大佬 你输入 123456789
while(++k*k <= length);这里计算以后K=4;
char (*p) = (char(*))&a; 这里就是一个4个元素跨度的指针,
数组变成了
1 2 3 4
5 6 7 8
9
输出3X3,那4和8就会丢失啊 两手空空儿 发表于 2022-9-7 18:56
你输入 123456789
while(++k*k
正解! 两手空空儿 发表于 2022-9-7 18:56
你输入 123456789
while(++k*k
感谢解惑,感谢感谢
页:
[1]