当stc89c52RC单片机运行出错或程序陷入死循环时,如何来摆脱困境

当stc89c52RC单片机运行出错或程序陷入死循环时,如何来摆脱困境,第1张

单片机运行出错,说明程序有错误,必须查出来修改的,不能就这样错下去吧。

程序陷入死循环,这是人为的造成的,要避免写出死循环程序。

如何来摆脱困境?很简单,查出程序错误,加以修改,改掉死循环程序。

这都是人为的,也要人为的改正。靠单片机自己能改掉吗?

你的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语言程序问题!可以执行 但是到第三次循环出错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9726255.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存