单片机运行出错,说明程序有错误,必须查出来修改的,不能就这样错下去吧。
程序陷入死循环,这是人为的造成的,要避免写出死循环程序。
如何来摆脱困境?很简单,查出程序错误,加以修改,改掉死循环程序。
这都是人为的,也要人为的改正。靠单片机自己能改掉吗?
你的j一直等于1
for(i=0;i<N_NUMBERS-1;i++)
{
for(j=i+1;j<N_NUMBERS;j++)
{
if(numbers[i]==numbers[j])
{
matchScore=2mumber[j]+19;
printf("match %d and matchScore=%d\n",numbers[i],matchScore);
break; //没有接下去循环的必要了
}
}
}
这个是输入流里有残余数据,影响你的取值了。每次你输入的数据都会被放在输入流里
包括你回车符,下次你在取值的时候是直接从输入流里取值的,就会取到你的回车符,就
造成了格式化错位,程序崩溃了。在每个scanf语句前面加上fflush(in); 清空输入流里的数据就ok了,
你试试
测试下面的代码
#include<stdioh>
#include<stringh>
int main()
{
char a[81];
int i=0,j=0;
while ((a[i]=getchar())!='\n')
i++;
a[i]='\0';
printf("%d %d \n %s\n",i,j,a);
while (a[j]=='0'&&a[j+1]!='\0')
j++;
printf("%d %d \n %s\n",i,j,a);
if (j!=0)
for (i=0;i<=(strlen(a)-j);i++)/不建议这样写i<=(strlen(a)-j),
因为这是个动态的字符串,最好先求出字符串的长度在放进去,
二来更有效率,不用每次都计算字符串的长度/
a[i]=a[i+j];
printf("%d %d \n %s",i,j,a);
fflush(stdin);//清除缓冲
getchar();
return 0;
}
运行结果
输入为第一行的数据
运行没异常!不知道你用的编译器是什么绿色版精简版我使用的是vs2010
以上就是关于当stc89c52RC单片机运行出错或程序陷入死循环时,如何来摆脱困境全部的内容,包括:当stc89c52RC单片机运行出错或程序陷入死循环时,如何来摆脱困境、c语言 loop循环错误 求具体修改程序、c语言程序问题!可以执行 但是到第三次循环出错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)