【问题标题】:Use of getch function and gets and puts functionsgetch函数和gets和puts函数的使用
【发布时间】:2017-11-01 13:40:26
【问题描述】:

我对gets()、puts() 和getch() 有疑问的专家。

  1. 为什么我们有 scanf() 和 printf() 时还要使用 gets() 和 puts()?
  2. getch() 有什么用。

请用简单的语言解释一下,因为我是初学者。

提前谢谢你。 :)

【问题讨论】:

标签: c gets getch puts


【解决方案1】:

gets 不再存在(除了在过时的环境中,例如臭名昭​​著的 TurboC),请改用 fgets

  • fgets 从包括终端在内的文件中读取一行文本(标准输出)
  • puts 向终端写入一行文本(标准输出)
  • fputs 将一行文本写入文件,包括终端(标准输出)
  • getch 从标准输入(终端)读取字符
  • printf和朋友让你打印格式化输出
  • scanf 和朋友允许您读取格式化输入。

【讨论】:

  • 我不会说 Turbo C 臭名昭著,只是非常古老。它是当时最先进的编译器。出色的性能,出色的 IDE,几乎完全没有错误,出色的调试器,出色的文档。将 Turbo C 中发现的错误数量与 gcc+Eclipse 中发现的错误数量进行比较。我不会因为 T-Ford 太旧而将其称为臭名昭著,但我肯定不会在 2017 年开一辆。
【解决方案2】:

当我们有scanf()和printf()的时候,为什么还要使用gets()和puts()?

我们不使用gets(),该函数设计得非常糟糕,以至于它在 18 年前被标记为过时,最终在 6 年前完全从 C 语言中删除。如果有人教你使用gets(),你需要找到更新的学习资源。见What are the C functions from the standard library that must / should be avoided?

puts(str)仅作为printf("%s", str)的微优化使用。 puts() 传统上比printf() 稍微快一点,因为它不需要解析格式字符串。今天,这种性能优势已不再是问题。

但是,puts()printf()安全。你可以编写像printf("%s", pointer_to_int) 这样的错误代码,它可能会在没有警告的情况下编译。但是puts(pointer_to_int) 永远不会在没有警告/错误的情况下编译。

通常,由于类型安全性差,stdio.h 的大部分内容都是危险且不安全的。在专业的、生产质量的代码中避免了它。对于学生/业余爱好者来说,printf/scanf 很好。


getch()有什么用

getch() 是 C 的非标准扩展,它允许程序从标准输入读取字符,而不会将键入的字符回显到标准输出(屏幕)。

这个函数在 MS DOS 时代很流行,当时 Borland Turbo C 是主要的编译器。因为 Turbo C 拥有它,其他一些编译器也开始支持它以及非标准的 conio.h 库。我们说的是 1990 年代初。

您不应该在现代 C 编程中使用此函数。

(虽然可以通过各种 API 调用自行实现,如this example for Windows。)

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2017-03-30
    • 2011-07-01
    相关资源
    最近更新 更多