c语言代码执行到一半终止?

   更新日期:2024.06.01
大概问题,我已经知道了,所谓的执行到一半就终止,是因为数组越界了,而且编译器不会报警。
比如,在你这个程序里,我输出50-200,他永远只会提示你有21个,因为你输出之前,还需要把这个偶数存放到一维数组a中,然而一维数组只能存放20个数,50-200中间有76个偶数,到了第20个偶数的时候,数组就已经越界了,程序就运行不正常了,应该是直接跳出了循环。而你是在数组存放了第20个数的后面进行了i++,所以提示是第21个数,数组是从0开始计数的,你是从一开始提示的,所以第21个数其实就是数组a[20]的数,然后就跳出循环了,只要偶数大于21个,程序永远都只显示21个数,建议要么把数组去掉,这样就可以显示全部的偶数了,就正常了,要么把数组设置的大一点,但是这样,如果数太多了,还是会溢出的,看你的感觉是想保存前20个偶数,那么建议程序改成这样,就能即保存前20个数,显示的也是正常的。
代码如下:
#include <stdio.h>
#include <windows.h>
int main()
{
int a[20];
int c,d,e,f,g,h,i;
long b;
printf("起始值:");
scanf("%d",&c);
printf("终止值:");
scanf("%d",&d);
d++;
for(b=c;b<d;b++)
{
if(b%2==0)
{
if(i<20)
{
a[i]=b;
}
i++;
printf("第%d个偶数:%d\n",i,b);
}
}

printf("%d到%d中有%d个偶数",c,d,i);
return 0;
}

你把long类型换成int就行了

  • 18054569863 :c语言出现了一个问题,导致程序停止正常工作,请关闭程序
    柴连卖2011 :答:1、野指针,你使用的指针指向未知区域 2、scanf函数输入整形、字符……的时候缺少了& 3、缓冲区溢出,也就是说你使用数组时不经意间越界了
  • 18054569863 :c语言为什么while运行到一半就不运行了
    柴连卖2011 :答:3、stu[n+i].mima定义为long int, stu[n+i].mima = b只是赋b的地址到密码,而不是值。应该把密码先定义为char[], 然后通过 strcpy(stu[n+i].mima, b)赋值。4、因为用到字符串函数,应该包括头文件 string.h。最终代码如下:include <string.h>typedef struct{ char num[50]; cha...
  • 18054569863 :C语言 程序运行到一半告诉我出现一个问题导致程序停止工作
    柴连卖2011 :答:continue",\"for","void","sizeof","default","do","long"};//数组少一项,没有27项,另外几个关键词前面有空格,也应该删除。 加了续行符号。修改之后,运行成功:我用你的程序做a.txt,生成文件b.txt,c.txt,今天不知什么情况,不能上传。为什么这样?很玄妙:rwtab数组少一项,rwtab[26...
  • 18054569863 :c语言程序总运行不了,怎么回事啊?求高人指点。。。下面是我写的程序...
    柴连卖2011 :答:这代码问题很多啊 1、你传递的参数没有按照函数定义的参数类型。比如insert(int score[],int n,int x,int i)但是使用时if(insert(score[N],i,x,*n)==1) 。第一个参数本来是传递数组指针,结果你传递的是一个越界的数组元素,第一个参数应该改为score。第二个和第四个参数至少从名字上看是...
  • 18054569863 :计算机二级C语言程序设计题,为什么我运行结果是对的,但被系统强行停止了...
    柴连卖2011 :答:1.文件读写有问题,没有fp!=null的判断,若目标文件不存在,将导致指针异常崩溃。2.根本没有初始化i的值就开始调用F(i)3.程序效率太低,fun函数里居然用while循环计算一个O(2^n)的递归,当n规模很大时你的程序将极为缓慢。这里显然该用递推计算并用数组保存各项的值。4.代码风格不规范,估计是...
  • 18054569863 :C语言程序运行显示停止运行
    柴连卖2011 :答:你的C语言程序我帮你改完了,你看看吧(改动的地方见注释)include <stdio.h>int main(){ int a,b,c,d,e,f,g; printf("请输入a的值:\n"); scanf("%d",&a); //这里把scanf("%d,&a");改成scanf("%d",&a); printf("请输入b的值:\n"); scanf("%d",&b); //这里把...
  • 18054569863 :C语言 程序编译无报错 运行到一半windows停止工作
    柴连卖2011 :答:有一段:char *inputname,*outputname;...scanf("%c,%c",&inputname,&outputname);这里inputname和outputname都是指针,而且是没有分配缓冲区的,读入字符串也不应该用%c,你可以查一下scanf用法把这里改了。至于其他地方,没有完整代码也无法调试哎 ...
  • 18054569863 :C语言 未执行完程序就停止运行
    柴连卖2011 :答:改正后如下(VS community 2017编译):include <stdio.h>#include <string.h>int main(void){char a[30];char b[30];printf("请输入你的姓氏:");scanf_s("%s", a, 26);printf("请输入你的名字:");scanf_s("%s", b, 26);printf("\n%s %s\n", a, b);printf("%d, %d\n"...
  • 18054569863 :这个C语言代码一执行就显示停止工作,是代码有问题么??
    柴连卖2011 :答:你的代码里面,printf 格式里面是 %s , 但是你给出的是一个字符,而且你的字符数组没有初始化,在输入时也木有明显的字符串结束符,在打印出来的时候,很可能程序越界打印出一些意想不到的东西出来。你测试下面代码呢:include <stdio.h>#include <string>int main(void){ char string1[80]...
  • 18054569863 :C语言编程,为什么程序的后一半不能运行了?求大神~~
    柴连卖2011 :答:不是不能运行,实际上已经运行了,打印出来的就是 回车字符 因为getchar()函数也是从输入缓冲区取值的,你前面的scanf()函数结束时的回车键保留在了缓存区,被下面的getchar()直接取走了,一般我都在scanf()后面加一句 getchar(); 将这个回车值跳掉 ...
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网