代码之家  ›  专栏  ›  技术社区  ›  Remo.D

C风格打印/扫描

  •  1
  • Remo.D  · 技术社区  · 15 年前

     ...
     printf("What's your name? ");
     scanf("%s",name);
     ...
    

    这让人想起了过去的基本生活( INPUT 对于那些记得它的人)。

    这些问题中的大多数(如果不是全部的话)都来自于刚刚学习C语言的人,是他们的家庭作业或书中的例子。

    argv[...] fgets() . 当用户友好是必须的时候, termio

    现在,我想知道在过去的几年里是否有什么变化。人们现在是否有足够的能力将用户交互构建为一个固定的问题/答案?

    有人能告诉我这种方法的具体优点吗?

    6 回复  |  直到 15 年前
        1
  •  4
  •   John Bode    15 年前

    这种结构易于解释和学习,这就是为什么它出现在如此多的介绍性材料中。在C语言中以“正确的方式”进行用户输入对新手来说是相当令人畏惧的,尤其是当您必须处理标记化和转换时。

    然而,我同意,介绍性材料展示处理用户输入的更稳健的方法是很有价值的。

        2
  •  2
  •   ctford    15 年前

        3
  •  1
  •   pmg    15 年前

    fgets() / sscanf() 或类似的方式是接受用户输入的正确方式。

    把你在这里和其他地方读到的东西放在(大)一小撮盐里。

        4
  •  1
  •   McPherrinM    15 年前

    GNU readline库确实是这方面的优秀资源。它的主要优点是,它可以处理所有复杂的编辑,并允许用户拥有自己的输入设置,例如Vi或Emacs模式。

    这是库bash和许多其他程序,它们接受基于行的交互式数据使用。

        5
  •  0
  •   Brian Postow    15 年前

    我同意CTFord的观点,如果你在做一个命令行程序,那么stdin是一个处理输入的非常合理的方法。

    我知道这并不能真正回答你的问题,但我想我的观点是,这种编程风格已经变得不那么流行了,所以什么是“正确的”并不重要。

        6
  •  0
  •   Clifford    15 年前

    在很多情况下,如果你认为这很重要,你可能会错过练习的重点。家庭作业练习和现实世界的程序之间有着天壤之别。此类练习的目的很少(如果有的话)是教用户界面设计;你所描述的技巧通常只是获取真实练习的测试输入的一种简单方法,而且可能也受到了导师的鼓励,他们迫不及待地要求提交的代码遵循某种“课程风格”,以使评分更容易“课程风格”很少与“良好实践”或“实践风格”相同,但这并不是说它不起任何作用,甚至不是说该目的有利于学生的教育。

    不幸的是,新手们经常会对这些东西感到厌烦,因为它们通常与练习的实际目的无关。问题在于,使用标准库原语的用户输入并不是万无一失的,一些导师似乎认为。