如果是
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()格式控制字符串中写非格式转换字符,否则就是不自觉地在害人害己。