c语言蠢萌新。。。救救孩子呀

平海ovo 2018-11-07 08:11:04
#include <stdio.h>
int *p;
void P(int *x)
{
int m,n,t;
printf(" ");
scanf("%d%d",&m,&n);



t=*(x+m);
*(x+m)=*(x+n);
*(x+n)=t;

}





void R(int *x,int y)
{
for(int i=0;i<y/2;i++)
*(x+i)=*(x-y-i);

}






void D(int *x,int y)
{
int t;
printf(" ");
scanf("%d",&t);
for(int i=0;i<y;i++)
*(x+i)=*(x+i)/t;
}





void M(int *x,int y)
{
int t;
printf(" ");
scanf("%d",&t);
for(int i=0;i<y;i++)
*(x+i)=*(x+i)*t;
}




void S(int *x,int y)
{
int t;
printf(" ");
scanf("%d",&t);
for(int i=0;i<y;i++)
*(x+i)=*(x+i)+t;
}


void caozuo(int *x,int y)
{
char a;
scanf("%c",&a);
switch(a)
{
case 'S':S(x,y);break;
case 'M':M(x,y);break;
case 'D':D(x,y);break;
case 'R':R(x,y);break;
case 'P':P(x);break;
}

}


int main()
{
int n,m;
scanf("%d%d",&n,&m);
printf("\n");

for(int i=0;i<n;i++)
scanf("%d",p+n);
printf("\n");
for(int j=0;j<m;j++)
caozuo(p,n);
for(int l=0;l<n;l++)
printf("%d ",p+l);
return 0;



}

日常oj崩溃。。。。 提示runtime error. 一定是指针用错了 怎么改呢??qaq
...全文
594 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
_ZGq 2019-01-22
  • 打赏
  • 举报
回复
全局变量默认初始值为0,所以p一开始其实就是0了,不存在野指针的问题。
xiaojia88882004 2019-01-22
  • 打赏
  • 举报
回复
再初试编程的时候要对命令,规则有初步的了解。
zhouqunhai 2019-01-09
  • 打赏
  • 举报
回复
1楼扯淡吧,怎么不行
lin5161678 2019-01-09
  • 打赏
  • 举报
回复
引用 1 楼 niiiloc 的回复:
我发现好多人学了很久就不肯先先学会调试
scanf %d%d 这种怎么输入?至少得加个空格吧
%d%d 正常输入 空格回车tab都能分割输入
甚至 你可以写123-123
%d%d都能正确的读取出 123 和 -123
是你自己不熟悉
冷风1023 2019-01-09
  • 打赏
  • 举报
回复
int main()
{
int n,m;
scanf("%d%d",&n,&m);
printf("\n");

for(int i=0;i<n;i++)
scanf("%d",p+n);
printf("\n");
for(int j=0;j<m;j++)
caozuo(p,n);//这里的p是值传递,进去前什么样后面还是什么样,前面没有初始化
for(int l=0;l<n;l++)
printf("%d ",p+l);//这里的p是不确定的,出现问题正常。
return 0;

//里函数都不用看了

穿林打叶丶 2019-01-08
  • 打赏
  • 举报
回复
扫了一眼看到最后的printf 后面的指针地址没有*
zhouqunhai 2018-11-19
  • 打赏
  • 举报
回复
int *p=null;
微心 2018-11-19
  • 打赏
  • 举报
回复
水平不高,勿怪,*p没赋值无法调用,在自创函数中。新出现的函数中的指针没有定义,无法调用。从头到尾没有任何输出(除了空格),执行为空。没有任何依据判断
牛奶土豆 2018-11-18
  • 打赏
  • 举报
回复
目标是啥?调试很重要,学会使用gdb,至少学会VS IDE的断点调试吧
只此冒泡君 2018-11-10
  • 打赏
  • 举报
回复
卖萌可耻
hgreminem 2018-11-09
  • 打赏
  • 举报
回复
要学会单步调试,学会看崩溃时的堆栈信息
平海ovo 2018-11-08
  • 打赏
  • 举报
回复
最后那个pringf的确错了。改过来貌似还有错误
自信男孩 2018-11-08
  • 打赏
  • 举报
回复
引用 1 楼 colinfang2006 的回复:
我发现好多人学了很久就不肯先先学会调试
scanf %d%d 这种怎么输入?至少得加个空格吧

不加也没问题的
赵4老师 2018-11-08
  • 打赏
  • 举报
回复
引用 1 楼 colinfang2006 的回复:
我发现好多人学了很久就不肯先先学会调试
scanf %d%d 这种怎么输入?至少得加个空格吧

super_admi 2018-11-08
  • 打赏
  • 举报
回复
你对自己描述的三个字,我只看到第一个。
636f6c696e 2018-11-08
  • 打赏
  • 举报
回复
我发现好多人学了很久就不肯先先学会调试 scanf %d%d 这种怎么输入?至少得加个空格吧
自信男孩 2018-11-08
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int *p;
void P(int *x)
{
int m,n,t;
printf(" ");
scanf("%d%d",&m,&n);

t=*(x+m);
*(x+m)=*(x+n);
*(x+n)=t;

}
void R(int *x,int y)
{
for(int i=0;i<y/2;i++)
*(x+i)=*(x-y-i);

}

void D(int *x,int y)
{
int t;
printf(" ");
scanf("%d",&t);
for(int i=0;i<y;i++)
*(x+i)=*(x+i)/t;
}

void M(int *x,int y)
{
int t;
printf(" ");
scanf("%d",&t);
for(int i=0;i<y;i++)
*(x+i)=*(x+i)*t;
}

void S(int *x,int y)
{
int t;
printf(" ");
scanf("%d",&t);
for(int i=0;i<y;i++)
*(x+i)=*(x+i)+t;
}

void caozuo(int *x,int y)
{
char a;
scanf("%c",&a);
switch(a)
{
case 'S':S(x,y);break;
case 'M':M(x,y);break;
case 'D':D(x,y);break;
case 'R':R(x,y);break;
case 'P':P(x);break;
}

}


int main()
{
int n,m;
scanf("%d%d",&n,&m);
printf("\n");

p = (int *)malloc(sizeof(int) * n);
if (!p)
return -1;
for(int i=0;i<n;i++)
scanf("%d",p+n);
getchar();
printf("\n");
for(int j=0;j<m;j++)
caozuo(p,n);
for(int l=0;l<n;l++)
printf("%d ", *(p+l));


free(p);

return 0;
}

参考一下吧

使用NULL指针导致的段错误

33,311

社区成员

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

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