devc用for的嵌套实现计时两分钟为什么只能显示一半

如题所述

百度知道
C语言:这个程序为什么运行出来只有一半结果,
墨梓暄丙麦
TA获得超过3万个赞
关注
成为第63位粉丝
有点儿意思。原因却出乎意料的简单。
char
*rwtab[27]={"main","if","then","while","do","
static","int","
double","struct","break","else","long","switch","case","typedef","char","return","const","float","short","continue","for","void","sizeof","default","do"};
少了一项,只有26项,rwtab[26]是空指针,访问到它时,就出错了。错误提示如下:
我没有修改这一句的时候,在你指出出错的地方加了下面一句:
for(n=0;n<27;n++)
if(strcmp(token,rwtab[n])==0)//比较是否关键字
{
printf("cathch
a
key-word\n");
//
}
出错了,提示信息如下:
这意味着,访问了一个空指针。
修改如下:
char
*rwtab[27]={"main","if","then","while","do","static","int",\"double","struct","break","else","long","switch","case",\"typedef","char","return","const","float","short","continue",\"for","void","sizeof","default","do","long"};//数组少一项,没有27项,另外几个关键词前面有空格,也应该删除。
加了续行符号。修改之后,运行成功:
我用你的程序做a.txt,生成文件b.txt,c.txt,今天不知什么情况,不能上传。
为什么这样?很玄妙:
rwtab数组少一项,rwtab[26]会引用一个空指针,产生错误。这儿没有语句时,循环没有实质性语句,编译程序优化,
不会编译这个循环的语句,程序中根本没有这几句的内容,因而不会出错。有了语句,就不能省略了,就出错了。
就是这样简单。
另外,你的程序必须当做c++程序编译,否则通不过。c不允许在有实质语句之后定义变量,变量说明要全部放到相应段的最前面,也不支持//注释。我是用devc++编译成功的,用wintc编译失败。
温馨提示:答案为网友推荐,仅供参考