菜鸟的问题?帮忙看一下!

cnbj8607 2010-03-13 11:10:54
这是一个二维数组转置的问题,在VC2008下调试的,我有几个地方很不明白:
请看下边:

#include<stdio.h>
void main()
{
void enter_a(int (*pt)[3]);
void swap_a(int (*pt)[3]);
void print_result(int (*pt)[3]);
int a[3][3],(*p)[3];
p=a;
enter_a(p);
swap_a(p);
print_result(p);
printf("Press any key to continue...\n");
getchar();//此处为何得用两个getchar才能让程序运行完后不消失?还有好方法吗?
getchar();
}

void enter_a(int (*pt)[3])//输入二维数组,指针下边用得正确吗?
{
int i,j;
printf("Please enter the array:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
scanf("%d",&pt[i][j]);//此处有警告,建议用scanf_s代替,为什么呢?
}
}

void swap_a(int (*pt)[3])//数组转置函数,有什么更好的方法吗?
{
int i,j,temp[3][3];
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
temp[j][i]=pt[i][j];
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
pt[i][j]=temp[i][j];
}
}

void print_result(int (*pt)[3])//输出结果;
{
int i,j;
printf("\nThe new array:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",pt[i][j]);
printf("\n");
}
}
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaoxigame 2010-03-14
  • 打赏
  • 举报
回复
你可以把两个getchar()都去掉 加入DOX命令下的system函数 system("PAUSE")
PAUSE 指令就是暂停批文件的处理并显示消息
system这个函数在stdlib.h头文件里
cnbj8607 2010-03-14
  • 打赏
  • 举报
回复
不加的话运行后不能看到结果。
野男孩 2010-03-14
  • 打赏
  • 举报
回复
scanf("%d",&pt[i][j]);//此处有警告,建议用scanf_s代替,为什么呢?

vs2008总是建议C运行时库函数使用对应的所谓安全版本,也就是_s的版本。lz如果以后都是用vs2008及更新的vs系列,那就接受这个建议吧。不接受也没关系,自己写代码学习问题不大。

上面那个二维数组的指针用得对着呢。


需要2次getchar是因为第一次getchar()会得到上次scanf输入后的回车字符。。。所以第二个getchar才会等待。最简单的可以这样:
void main()
{
....
swap_a(p);
print_result(p);

system("pause"); //就这个语句就行了
}

前面得加上#include <stdlib.h>,否则不能引用system()函数
zwfeng1988 2010-03-14
  • 打赏
  • 举报
回复
getchar();//此处为何得用两个getchar才能让程序运行完后不消失?还有好方法吗?
getchar();
LZ可以考虑用gets()代替的
如果在C++中,可以考虑用system("pause");
vanchristin 2010-03-14
  • 打赏
  • 举报
回复
在程序最后加一句
system("pause");
也可以让程序不消失
cy330206 2010-03-13
  • 打赏
  • 举报
回复
getchar();//此处为何得用两个getchar才能让程序运行完后不消失?还有好方法吗?
getchar();
不加也可以的

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧