2016 - 2024

感恩一路有你

c语言有错误找不到怎么办 C语言本身没有输入输出?

浏览量:4816 时间:2023-06-27 17:51:40 作者:采采

C语言本身没有输入输出?

c语言本身不提供输入输出语句,输入输出的操作都是通过函数来实现的。C语言的标准函数库提供了一些输入输出函数,比如printf函数,scanf函数。但是printf和scanf函数不是C语言的关键字,而是函数的名字,不要误认为 "输入输出语句由C语言提供。

把句子翻译成二进制指令是在编译阶段完成的,没有输入或输出句子,可以避免在编译阶段处理硬件相关的问题。

这样,编译系统可以简化,具有通用性,适用于各种计算机。扩展数据1、在输入流中,数据项必须用空格、制表符和换行符分隔。

逗号和分号不是分隔符,例如下面的代码:

Scanf(#34%d%d#34,ampr,ampc)会接受10 ^ 20的输入,但是遇到10 20就会失败。()函数是一个打印格式函数,一般用于将信息以指定的格式输出到标准输出设备。写程序的时候经常用到这个函数。函数的原型是:int printf(const char *format,...)函数的返回值是整数。如果成功,则返回输出的字符数,如果输出不正确,则返回负值。

C语言程序开发中,难免会出现逻辑错误,怎样让程序自己输出错误位置呢?

谢谢邀请我。

在C语言程序的开发中,程序员经常把一个复杂的任务分成几个简单的子模块,这些子模块可以看作是复杂任务的各个组成部分。所以程序员可以像 "积木 "来解决复杂的任务。

这样做的原因是,如果您直接编写C语言代码来一次性解决复杂的任务,往往会使整个代码 "皱巴巴的 ",不仅开发时容易引入bug,后期维护起来也更痛苦。试想一下,如果把任务分成几个子模块,以后发现问题可能只需要修改一个子模块。但是如果你不这样做。;不要这样做,你必须从所有的代码开始寻找并解决问题。哪种开发风格便于维护,相信题主自然明白。

任务被分成子模块后,每个子模块往往被封装成一个C语言函数,所以最后的 "堆积木材和木材;"实际上是调用每个C语言函数。但每个子模块都可能得到正常结果或异常结果,通常用C语言函数的返回值来区分。当调用 "堆积木材和木材;"阶段,要根据被调用函数的返回值做不同的处理。

例如,当一个子模块负责计算用户输入的数字的log(对数)值时,如果用户输入一个正数,该子模块可以得到一个正常的结果。但如果用户输入的是负数,子模块显然无法得到正常的结果。

这里 这是一个例子。示例c语言代码尽可能简单,以便集中讨论主题:

cond()函数产生一个从0到10的随机数。如果随机数小于5,则返回-1(模拟异常结果),否则返回0(模拟正常结果)。fun1()函数和fun2()函数都会根据cond()函数的返回值做一些进一步的工作(上面的C语言代码跳过 "进一步的工作和).在main()函数中,当 "堆积木材和木材;"调用fun1()和fun2()函数,它用一个if语句判断它们的返回值,并根据返回值做出不同的处理。

现在编译这个C语言程序并执行它,得到如下结果:

从输出结果中,我们可以发现C语言程序输出 "cond是假的(模拟异常)。我们经常不 t不想让程序输出异常结果,所以在看到异常结果后,我们需要知道为什么会出现这个结果。

适当的输出信息有助于定位异常和检查C语言的源代码。发现程序输出的异常结果是由于if(!fun1() ampamp!Fun2())为假,但无论fun1()还是fun2()返回-1,if条件表达式都会为假。在这种情况下,main()函数调用fun1()和fun2()函数是不合适的,因为我们可以 这里不继续跟踪异常的原因。似乎main()函数更合适。相关的C语言代码如下。请看:

编译并执行修改后的C语言代码,得到如下结果:

这一次,我们知道哪个函数导致了异常输出,但是它 写这么多行代码太麻烦了,只调用两个函数可能都用不到。如果其他地方需要类似的,it 这就更麻烦了。有没有更方便的方法?我们尝试将错误消息插入fun1()和fun2()函数,并将fun1()和fun2()函数的代码修改如下:

现在在修改前使用main()函数如下:

编译执行这段C语言代码并执行,得到如下输出:

这样,我们不仅可以从输出中推断出是哪个函数导致了异常,还可以保持C语言代码尽可能的简单。但是代码还是有点罗嗦:

这两个句子的输出只有fun1和fun2不一样,但是我们需要把几乎同一个句子完整的写两遍,万一以后需要修改,两个地方都要修改,比较麻烦,容易出错。这种情况可以避免吗?

使用__FUNCTION__、__LINE__、__FILE__等关键字在C语言程序的编译阶段,编译器会__FUNCTION__。关键字__LINE__和__FILE__被解释为 "函数名和, "行号 "和 "文件名 "。所以有了这些关键词,我们就不 不需要手动输入函数名。对于本节中提到的例子,我们可以完全使用上一节中介绍的define宏定义:

编译并执行这段C语言代码,得到如下结果:

可以看到,程序不仅输出了异常的函数名,还输出了函数所在的文件名(t.c)和行号(lin:26,lin:41)。这些调试信息看起来很舒服,在大型项目开发中非常实用。

类似的调试宏包括时间,日期等等,所以我赢了 不要一一演示。

小结本节讨论在C语言程序的开发中,复杂的任务往往被分成多个子模块,打包成函数,这些子模块可能有正常的处理结果,也可能有异常的处理结果。所以本节讨论了输出基本调试信息对于定位问题的重要性,最后介绍了C语言程序开发中常用的几个调试宏,在大型项目开发中非常实用。

欢迎在评论区一起讨论提问。这些文章都是手工原创的。每天都有最简单的C语言、linux等嵌入式开发介绍。如果你喜欢我的文章,请关注一波。你可以看到最新的更新和以前的文章。

函数 程序 语言 代码

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。