c语言指针小练习 搞不明白哪里出错了 求大神

胖坦 2018-11-28 02:28:43
真的很简单的一道题 但是我不知道为什么我每次操作 末尾的零元素区总会出错 前两个0总会变成4 例如正确输出是1230000。我的输出就变成1234400
...全文
306 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
是小之禺啊 2018-12-01
  • 打赏
  • 举报
回复
引用 7 楼 ranranyuranran 的回复:
[quote=引用 5 楼 SummerLotus513 的回复:]你的代码问题出现在第19行
我看你的思想应该是类似于冒泡,将非零元素顶上去是吧?
但是你在19行for查找后面非零元素的时候总是查找了10个,比如第三个数据是0,你无论如何,你都要找到第13位地址的内容~
你的代码每个人运行出来结果后面错的那两位肯定不同,因为拿到的不是属于你a数组的内容~
哦试着写下,稍后贴出代码~
明白了 谢谢您[/quote]
我调试的代码6楼已贴出
胖坦 2018-11-29
  • 打赏
  • 举报
回复
引用 5 楼 SummerLotus513 的回复:
你的代码问题出现在第19行
我看你的思想应该是类似于冒泡,将非零元素顶上去是吧?
但是你在19行for查找后面非零元素的时候总是查找了10个,比如第三个数据是0,你无论如何,你都要找到第13位地址的内容~
你的代码每个人运行出来结果后面错的那两位肯定不同,因为拿到的不是属于你a数组的内容~
哦试着写下,稍后贴出代码~
明白了 谢谢您
是小之禺啊 2018-11-28
  • 打赏
  • 举报
回复
代码,仅供参考~

#include<stdio.h>
void swap(int *p, int n)
{
int i,j,k,m;
int *tmp = new int[n];
for(i = 0; i < n; i++)
tmp[i] = p[i];
for(j = 0; j < n; j++)
p[j] = 0;
for(k = 0,m = 0;k < n;k++)
if(0 != tmp[k])
p[m++] = tmp[k];
}
int main()
{
int a[10];
for(int i = 0; i < sizeof(a)/4; i++)
scanf("%d",&a[i]);
swap(a, sizeof(a)/4);//调用函数
for(int j = 0; j < sizeof(a)/4; j++)
printf("%d",a[j]);
return 0;
}

测试结果:

是小之禺啊 2018-11-28
  • 打赏
  • 举报
回复
你的代码问题出现在第19行
我看你的思想应该是类似于冒泡,将非零元素顶上去是吧?
但是你在19行for查找后面非零元素的时候总是查找了10个,比如第三个数据是0,你无论如何,你都要找到第13位地址的内容~
你的代码每个人运行出来结果后面错的那两位肯定不同,因为拿到的不是属于你a数组的内容~
哦试着写下,稍后贴出代码~
636f6c696e 2018-11-28
  • 打赏
  • 举报
回复
核心代码是用指针实现swap
领域灬alone 2018-11-28
  • 打赏
  • 举报
回复
数组先初始化,确保无缓存数据干扰
小猪猪哇 2018-11-28
  • 打赏
  • 举报
回复
代码看不清啊
zangfong 2018-11-28
  • 打赏
  • 举报
回复
代码也贴上来吧,光这张代码的截图,啥也看不清

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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