如何使用Dev C++调试c程序

如何使用Dev C++调试c程序,第1张

DEV-C是个IDE,它的编译器是MinGW

一、使用单步调试和观察变量的步骤:

1 编译通过(ctrl+F9)

2 设置断点(ctrl+F5)

3 调试(F8)

4 增加观察变量(在左边的debug观察窗口右键增加或者F4)

5 单步调试:F7

6 结束调试:ctrl+alt+f2

简单来说,它有两种方式,一种是源码debug,即分析源码来找出bug位置,一般使用printf()打印出程序执行每一步的信息,一种是可执行文件debug,需要使用调试器来进行。

1源码debug。类似于下面的源码,主要通过程序执行时输出的信息,来定位bug出现的位置,然后再修改源码。

例如:

#include <stdioh>

void f() { ; }

int main(){

#ifdef _DEBUG

printf("start main function!\n");

#endif

void f();

#ifdef _DEBUG

printf("leave main function !\n");

#endif

return 0;

}

2可执行文件调试,windows平台常用的就是vs/vc自带的调试,另外一个就是微软自家开发的调试器windbg。Linux平台以gdb为常用。

下面以dev-C++为例:

1)在“工具”-》编译选项-》"编译时加入以下命令"下面的编辑框里加上: -g3

2)在下面的"在连接器命令行加入以下命令" 下的编辑框上加上: -g3

3)转到程序页,把gcc行修改为:gccexe -D__DEBUG__,

4)把g++行修改为: g++exe -D__DEBUG__ ,

5)点击确定,重新编译,就能调试了。

把编写好的C语言程序编译成为EXE文件。

在该EXE文件所在的文件夹中打开CMD窗口,输入该EXE文件名,即可运行。

也可以在C语言程序的结束前加上getchar();

编译成EXE文件后,可以直接在资源管理器窗口中双击该EXE文件就可以运行的。

C语言输入输出函数有很多,标准I/O函数中包含了如下几个常用的函数:

标准输入输出:

1 scanf, printf

int scanf(const char format, arg_list)

scanf主要从标准输入流中获取参数值,format为指定的参数格式及参数类型,如scanf("%s,%d",str,icount);

它要求在标准输入流中输入类似"son of bitch,1000"这样的字符串,同时程序会将"son of bitch"给str,1000给icount。

scanf函数的返回值为int值,即成功赋值的个数,在上例中如果函数调用成功,则会返回2,所以我们在写程序时,可以通过语句

if( scanf("%s,%d",str,icount) != 2)

{

}

来判断用户输入是否正确

例子:

#include <stdioh>

#include <stdlibh>

int main()

{

printf("Input Data:\n");

char str[64];

int num;

scanf("%s,%d", str, &num);

printf("%s,%d", str, num);

return 0;

}

Input Data:

nihao,1

nihao,1,2009091631

此处将","当做了与前面的nhao以及1一起的字符串。注意scanf时,是以空格,制表符以及回车作为变量之间的分割的。

因此在使用scanf时尽量采用这几个作为分割标记。而不要像scanf("%s,%d", str, &num);,它无法正确输入数据。

int printf(const char format, arg_list)

printf主要是将格式化字符串输出到标准输出流中,在stdioh头文件中定义了标准的输入和输出,分别是stdin,stdout。

arg_list可以是变量名,也可以是表达式,但最终都会以值的形式填充进format中

格式化输入输出:

1 格式控制

格式控制是用双引号括起来的字符串,也称"转换控制字符串",它包含以下两部分信息。

格式说明:由"%"和格式字符组成,如%d,%f,%c,它的作用是把输出数据转换为指定格式输出,格式的说明总是由"%"字符开始的

普通字符:需要原样输出的字符,或者是一些有特殊含义的字符,如\n,\t。

\n 换行

\f 清屏并换页

\r 回车

\t Tab符

\xhh 表示一个ASCII码用16进表示,其中hh是1到2个16进制数

2 输出列表

就是需要输出的一些数据,也可以是表达式,如果在函数中需要输出多个变量或表达式,则要用逗号隔开。

一些特殊字符的输出:

单引号,双引号,和反斜杠的输出在前面加转义字符”\”,如:"\’", "\"", "\\"。

% 的输出用两个连在一起的%%,即 printf(“%%”);

常用的格式说明如下:

格式字符

d 以十进制形式输出带符号整数(正数不输出符号)

o 以八进制形式输出无符号整数(不输出前缀0)

x 以十六进制形式输出无符号整数(不输出前缀0x)

u 以十进制形式输出无符号整数

f 以小数形式输出单精度实数

lf 以小数形式输出双精度实数

e 以指数形式输出单、双精度实数

g 以%f,%e中较短的输出宽度输出单、双精度实数

c 输出单个字符

s 输出字符串

特殊:

对64位整数的输入输出,在POJ上的C++环境下(即VC),64位整数是:

__int64 (注意int前面是两个下划线),输入输出格式为”%I64d”

在G++环境下(即Dev C++) 64位整数是

long long 输入输出格式为”%lld”

输出宽度

  用十进制整数来表示输出的最少位数。注意若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。

可以在"%"和字母之间插进数字表示最大宽度。

%92f 表示输出场宽为9的浮点数,其中小数位为2,整数位为6,小数点占一位,不够9位右对齐。

%8s 表示输出8个字符的字符串, 不够8个字符右对齐。

如果字符串的长度,或整型数位数超过说明的场宽,将按其实际长度输出。

但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出;

若小数部分位数超过了说明的小数位宽度,则按说明的宽度以四舍五入输出。

另外,若想在输出值前加一些0, 就应在场宽项前加个0。

例如: d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度为4位。

如果用浮点数表示字符或整型量的输出格式,小数点后的数字代表最大宽度,小数点前的数字代表最小宽度。

例如: %69s 表示显示一个长度不小于6且不大于9的字符串。若大于9,则第9个字符以后的内容将被删除。

精度

精度格式符以""开头,后跟十进制整数。意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;

若实际位数大于所定义的精度数,则截去超过的部分。

标志格式字符

- 结果左对齐,右边填空格

+ 输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号

例如:

double c = 2421234524232;

printf(“%0204”); 表示输出精确到小数点后4位,输出占20位,若有空余的位补0。

2 getc,putc

int getc(FILE fp)

getc主要是从文件中读出一个字符常用的判断文件是否读取结束的语句为:(ch = getc(fp)) != EOF。EOF为文件结束标志,

定义在stdioh中,就像EXIT_SUCCESS,EXIT_FAILURE定义在stdlibh中一样,文件也可以被理解为一种流,所以当fp为stdin时,

getc(stdin)就等同于getchar()了

int putc(int ch,FILE fp)

putc主要是把字符ch写到文件fp中去。如果fp为stdout,则putc就等同于putchar()了。

#include <stdioh>

#include <stdlibh>

int main()

{

FILE fp = fopen("tmptxt", "w+");

putc('a', fp);

fflush(fp);

fclose(fp);

fp = fopen("tmptxt", "r+");

int c = getc(fp);

printf("%c\n", c);

fclose(fp);

int ch = getc(stdin);

putc( ch, stdout);

putc( '\n', stdout);

putc('a', stdout);

return 0;

}

3 getchar,putchar

int getchar(void)

getchar()主要是从标准输入流读取一个字符。默认的标准输入流即stdioh中定义的stdin。但是从输入流中读取字符时又

涉及到缓冲的问题,所以并不是在屏幕中敲上一个字符程序就会运行,一般是通过在屏幕上敲上回车键,然后将回车前的字符

串放在缓冲区中,getchar() 就是在缓冲区中一个一个的读字符。当然也可以在while循环中指定终止字符,如下面的语句:

while ((c = getchar()) != '#')

这是以'#'来结束的。

int putchar(int ch)

putchar(ch)主要是把字符ch写到标准流stdout中去

#include <stdioh>

#include <stdlibh>

int main()

{

int n;

while((n = getchar()) != '#')

{

putchar((char)n);

}

return 0;

}

4 gets,puts

char gets(char str)

gets() 主要是从标准输入流读取字符串并回显,读到换行符时退出,并会将换行符省去。

返回值为获得的字符串的首地址,实现链接操作。

int puts(char str)

puts() 主要是把字符串str写到标准流stdout中去,并会在输出到最后时添加一个换行符。

返回值为0表示正常,非零表示错误

#include <stdioh>

#include <stdlibh>

int main()

{

char str[256];

printf("%s\n", gets(str));

int ret = puts(str);

printf("len: %d\n", ret);

return 0;

}

#include<stdioh>

int

main()

{int

n;

while(scanf("%d",&n))//循环输入分数

{

if(

n<0||n>100)

break;//超出则退出循环

if(n>=60)

printf("及格");

else

printf("不及格");

printf("\n");//输出换行

}

return

0;

}

在DEV-C++试过,希望对楼主有用!

#include<stdioh>

int max(int x,int y)

{int z;

z=x>yx:y;//x与y之间是冒号

return(z);

}

main()

{extern int A,B;//声明类型

printf("%d\n",max(A,B));

getchar();

}

int A=13,B=-8;

顺便说一句,谭浩强之流还是别看了吧,感觉是为了讲语法而讲语法,里面会介绍一些在实际应用中根本不会用到的语法,却不知语法的第一任务是为编程服务,C语言入门经典其实挺好的

(1)《1》打开DEVC++,《2》编写程序,《3》编译,《4》运行;

(2)C语言的结构:《1》include必须的库的头文件,《2》定义全局变量;《3》定义函数;《4》定义main函数,DEVC++要求main用int的类型。

复杂的函数,要分成多个模块,分别编写,在main函数前面include进来。也可以制作你自己的库文件。

如图,注意红色圈出的地方:

①先确定你是Debug模式

②点击代码某行的左边,添加断点

③点击勾,可以运行到断点

④下面有各种操作,比如添加查看可以在左边看变量的值

⑤下面有各种操作,比如下一步等,也有快捷键比如F7可以运行下一句

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/langman/3528575.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存