zoukankan      html  css  js  c++  java
  • 怎样利用scanf()函数自虐

    如果是

    scanf("a=%f,b=%f,c=%f",&a,&b,&c);

    输入应采用如下形式

    a=12,b=24,c=36
    采用这种形式是为了使用户输入数据时添加必要的信息,使含义清楚,不易发生输入数据的错误。

    ——谭浩强,《C语言程序设计》(第2版),清华大学出版社,2008年11月,p71~72

    这段文字很唬人,貌似讲的头头是道,其实愚蠢透顶。

    程序是用来为用户解决问题的,而不是用来给用户添麻烦的。

    任何一个合格的程序员都不会写出

    scanf("a=%f,b=%f,c=%f",&a,&b,&c);
    这样的代码。理由是,要求用户输入的“a=”、“b=”、“c=”以及两个“,”都毫无意义。把这句蹩脚的代码稍微更改一下,就不难发现其愚蠢。它基本上等价于

    scanf("a=");

    scanf("%f",&a);

    scanf(",");

    scanf("b=");

    scanf("%f",&b);

    scanf(",");

    scanf("c=");

    scanf("%f",&c);

    其中的scanf("a=");、scanf("b=");、scanf("c=");和scanf(",");对于程序来说根本没有任何信息价值,增加这些代码的唯一效果就是给用户增加了许多不必要的麻烦。万一用户输入错误,还可以导致程序“挂掉”或出错。

    因此引文不但愚蠢,而且简直是在教唆学习者自虐——程序员总是程序的第一个使用者。

    那段引文应该修改为

    “如果是

    scanf("a=%f,b=%f,c=%f",&a,&b,&c);

    输入应采用如下形式

    a=12,b=24,c=36
    采用这种形式是为了使用户输入数据时同时给用户添加不必要的麻烦,使含义混乱,容易发生输入数据的错误。”

    对用户友好的、具有良好易用性的程序代码其实应该这样写

    printf("a=");

    scanf("%f",&a);

    printf ("b=");

    scanf("%f",&b);

    printf ("c=");

    scanf("%f",&c);

    通过调用函数printf()给用户以提示,而不是用“scanf("a=");”这样的代码来折磨用户。

    结论:不要在scanf()格式控制字符串中写非格式转换字符,否则就是不自觉地在害人害己。

  • 相关阅读:
    Swift和Objective-C混编注意
    【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?(转)
    baidu网盘下载神器 Pandownload
    为什么大学要学一堆纸上谈兵的课程?(转)
    数据结构实训——校园导游系统
    数据结构实训——哈希表设计
    数据结构实训——员工管理系统
    数据结构实训——成绩统计系统
    数据结构——链表实现一元多项式的表示和加法
    数据结构——顺序表的一些算法
  • 原文地址:https://www.cnblogs.com/pmer/p/1997299.html
Copyright © 2011-2022 走看看