测试代码
#include <stdio.h>
int main (int argc, char *argv[]) {
int sum = 0, i = 0;
char input[5];
while (1) {
scanf("%s", input);
for (i = 0; input[i] != '\0'; ++i)
sum = sum * 10 + input[i] - '0';
printf("input = %d\n", sum);
}
return 0;
}
测试过程
程序的作用是首先从键盘读入一串数字保存到char数组中,然后通过input[i] - '0’转换为整型存到sum中
例如输入“123”,会得到整数123
1)编译运行
可以看到,第一次的时候结果还是对的,为什么第二次发生了错误呢?
我们也已经为sum给了初始值0了呀,为什么会出现这样的错误呢?
可以使用display
命令使得每次停下来的时候都显示当前sum的值
如果不想跟踪显示了,可以使用undisplay
命令,变量sum的编号是1,可以使用undisplay 1
命令来取消它的跟踪显示
可以看到,sum已经赋了初始值,并不是sum的问题
2)断点调试
首先我们在运算处设置一个断点,
然后使用continue
命令让程序连续运行而非单步运行,可以看到,已经到断点处停止,然后使用命令next
完成赋值
继续运行程序,发现123是能正确得到的,当我们输入456时,发现此时sum的值已经是123了,而不是从0开始
那么,这个时候,我们就发现了问题所在,原来是在下一次循环的时候,sum的值没有从0开始
于是我们用set
命令来设置当前变量的值为0,继续运行程序
这个时候,你发现,sum的值是4了,是不是好像对了呢?继续执行
好的,程序运行成功了,说明要每次循环的开始都要将sum置为0才可以
Tips:查看、禁用、启用、删除断点
查看断点:
info breakpoints
禁用断点:disable breakpoints
启用断点:enable 编号
删除断点:delete breakpoints