C语言程序改错 高手来 回答好了有加分哦
作者&投稿:啜光 (若有异议请与网页底部的电邮联系)
你通过键盘同时输入1 2 3 4 5 6 7 8 9 0,一共是十个数,而你定义数组时:int a[9],却是数组长度为9的数组,因此你在for(i=0;i<10;i++) 中引用数组a时已经越界。即数组a[9]中没有元素a[9]。
对于scanf(p1,p2)函数,一共有两个参数,第一个p1是格式控制(即输入格式),第二个p2是地址列表(即必须是地址)。而你的scanf("%d",p[i]);p[i]不是地址,是一个数组元素,应该改为:scanf("%d",&p[i]);当你用scanf("%d",p[i]);时,程序认为p[i]的值是一个内存地址,按照此地址去访问内存时,可能访问到了不应该访问的单元(例如只能读的单元,你却要写),所以报错。
这里错了,应改为:
for(i=8;i>=0;i--) a[i]=a[i+1];
#include<stdio.h>
main()
{int a[10],*p,i;//你下面的代码里面存放了0~9这10个数字,a必须也是a[10],a[9]是不对的
p=a;
printf("please enter 1,2,3,4,5,6,7,8,9,0\n");
for(i=0;i<10;i++) scanf("%d",&p[i]);//scanf应该跟一个地址作为参数,所以不是p[i],应该是&p[i]
for(i=0;i<10;i++) if(a[i]%2!=0) printf("%d",a[i]);//输出应该用printf,而不是scanf
}
那个出错信息就是scanf将你传入的p[i]的值当做地址去访问了,所以出错
请问楼主是怎么输入的?是像1,2,3,4……这样输入的吗?如果是的话我就知道错在哪里?是的话我在追问里回答你
还有scanf("%d",p[i]);
也错了,改成scanf("%d",(p+i));
main()那一行应该改为
int main()
其他的没错
至于你的图片可能是你系统有问题 建议你把你的编程软件卸载了重新安装
#include<stdio.h>
main()
{int a[9],*p,i;
p=a;
printf("please enter 1,2,3,4,5,6,7,8,9,0\n");
for(i=0;i<10;i++) scanf("%d",p[i]);
for(i=0;i<10;i++) if(a[i]%2!=0) scanf("%d",a[i]);
}
我想创建一个程序用来输入0到9以内的质数,但是此程序写出来以后 连接,编译都没有问题,但是当运行的时候,却出现了这样的显示(如图)
请高手帮忙回答一下:
1.该程序哪里错了,请将详细一点
2.图一的出错信息什么意思?
以上问题都请尽量详细,有更详细的资料的话麻烦把网址引用一下 谢谢
回答好了有加分哦
鞠苑诺特: #include<stdio.h> void main() { char ch; ch=getchar();/**********ERROR**********/ if(ch>='0' && ch<='9')/**********ERROR**********/ printf("%d\n",ch);//ch是字符类型,你输出的类型是%d是整型,这样输出的是字符ch对应的ASCII码值,如果想输出...
彭泽县19765157230: C语言程序改错 - ?
鞠苑诺特: 将scanf()和printf()中的%d和%f全部改为%lf即可.
彭泽县19765157230: 求改错,C语言的一个程序,大神请出手一下,最好解释功能模块,谢谢 - ?
鞠苑诺特: 执行这部分的时候 for(i = 1;item >= eps; i++){item = fact(i) / multi(2*i + 1);sum = sum + item;} i=1,所以返回到fact()函数执行fact(1),结果是res=0,return res=0,所以fact(1)=0,即fact(i)=0, 这时无论multi等于多少,item = fact(i) / multi(2*i + ...
彭泽县19765157230: c语言程序改错,告诉我哪里有错,怎么改,谢谢啦 - ?
鞠苑诺特: 1、int i,j后面没有分号,应该是int i,j;2、for语句中i++应该是i+=23、return (s)不是return (t)
彭泽县19765157230: C语言程序改错 - ?
鞠苑诺特: main中调用 input(num[],name);//注意num是数组 sort(num[],name);你的错误提醒你num没定义说明你使用num数组有问题
彭泽县19765157230: c语言 改错,求解释,有采纳 - ?
鞠苑诺特: 1 第一出错误因为数组的格式必须是 type name[]; 缺少了【】所以第一个错了 第二处,因为你要定义的数组元素有小数,所以不能用int 整数格式 要用浮点型 float 或double2 第一...
彭泽县19765157230: 求帮忙C语言程序改错,改完后把原题和答案完整的回帖给我,谢谢了 - ?
鞠苑诺特: 我晕..这题太简单了啊具体程序就不说了,第一个错误是语句结束没有分号;第二个错误是i
彭泽县19765157230: c语言程序改错:有4处错误 - ?
鞠苑诺特: 循环有问题,改为这样试试: for(j=0; j<N-1; j++)for(i=0; i<N-j-1; i++)
彭泽县19765157230: C语言编程,麻烦高手帮忙改错.谢谢 - ?
鞠苑诺特: 那句 if(j%"%d"==0&&j%"%d"==0 ,a ,b) 应该改成 if(j % a == 0 && j % b == 0)这是因为 取模 % 运算要求两边是 int 整型,但是你却把 "%d" 给放上去了.因为 "%d" 是一个3个字符的字符串,所以类型为 const char[3],这样就会出现 “invalid operands of types `int' and `const char[3]' to binary `operator%'” 这个错误了.小力庭 2013-4-20 欢迎到我微博上切磋交流 weibo.com/litingsoft
彭泽县19765157230: c语言程序设计改错 求解 - ?
鞠苑诺特: #include void sort(int arry[]);//函数声明,排序 void main() { int a[10]; int i; for(i=0;i scanf("%d",&a[i]); sort(a); } void sort(int arry[]) { int i,j,t; for(i=0;i { for(j=0;j if(arry[j]>arry[j+1]) {t=arry[j]; arry[j]=arry[j+1]; arry[j+1]=t;} } for(i=0;i printf("%d ",arry[i]); }