Ceteris paribus (格式良好的数据,良好的缓冲实践以及不适用的东西),有什么理由我喜欢循环而scanf
的返回值是1,而不是!EOF
? 我可能已经在某个地方读过这个,或者其他什么,但我也可能错了。 其他人怎么想?
scanf
返回成功转换的项目数…或出错时的EOF。 因此,以有意义的方式对条件进行编码。
scanfresult = scanf(...); while (scanfresult != EOF) /* while scanf didn't error */ while (scanfresult == 1) /* while scanf performed 1 assignment */ while (scanfresult > 2) /* while scanf performed 3 or more assignments */
举例说明
scanfresult = scanf("%d", &a); /* type "forty two" */ if (scanfresult != EOF) /* not scanf error; runs, but `a` hasn't been assigned */; if (scanfresult != 1) /* `a` hasn't been assigned */;
编辑:添加了另一个更人为的例子
int a[5], b[5]; printf("Enter up to 5 pairs of numbersn"); scanfresult = scanf("%d%d%d%d%d%d%d%d%d%d", a+0,b+0,a+1,b+1,a+2,b+2,a+3,b+3,a+4,b+4); switch (scanfresult) { case EOF: assert(0 && "this didn't happen"); break; case 1: case 3: case 5: case 7: case 9: printf("I said **pairs of numbers**n"); break; case 0: printf("What am I supposed to do with no numbers?n"); break; default: pairs = scanfresult / 2; dealwithpairs(a, b, pairs); break; }
取决于您想要对格式错误的输入做什么 – 如果您的扫描模式不匹配,您可以返回0
。 因此,如果您在循环外处理该情况(例如,如果您将其视为与输入错误相同),则与1
进行比较(或者您的scanf调用中有多少项)。
来自https://www.cplusplus.com/reference/clibrary/cstdio/scanf/
成功时,该函数返回成功读取的项目数。 如果发生匹配故障,此计数可以匹配预期的读数或更少,甚至为零。 如果在成功读取任何数据之前输入失败,则返回EOF。
确保您读取预期项目数的唯一方法是将返回值与该数字进行比较。
以上就是c/c++开发分享虽然scanf!= EOF或scanf == 1?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/518768.html