ignoring return value of 'scanf 'declared with attribute 出现的原因和解决办法
5条回答 默认 最新
关注 【相关推荐】
- 你看下这篇博客吧, 应该有用👉 :scanf()函数的bug问题
- 除此之外, 这篇博客: scanf函数的读取中的 2.scanf的返回值 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
#include "stdafx.h" #include <stdio.h> int main(int argc, char* argv[]) { int nNum = 0; char chA = '0'; int nResult = scanf("%d%c",&nNum,&chA);//输入AB printf("nNum = %d\n",nNum); printf("nResult = %d\n",nResult); printf("chA = %c\n",chA); scanf("%c",&chA); printf("Again chA = %c\n",chA); return 0; }
我们可以看到当第一个参数读取失败的时候,后面的所有都不会被读取,
当再次尝试为chA赋值的时候 缓冲区还是从指向A,从他开始读取。
而且返回值是0,表示读取成功了0个参数。2.1
int main(int argc, char* argv[]) { int nNum = 0; char chA = '0'; int nResult = scanf("%c%d",&chA,&nNum);//输入AB printf("nNum = %d\n",nNum); printf("nResult = %d\n",nResult); printf("chA = %c\n",chA); scanf("%c",&chA); printf("Again chA = %c\n",chA); return 0; }
我们可以看到参数的返回值是1,表示读取成功了一个参数,就是chA = ‘A’;
然后scanf尝试为参数nNum读取时,发现不匹配,将字符B放回缓冲区,并结束该次的scanf,当再次从缓冲区为chA读取数据时,读取的便是字符B了
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 如何进行点云姿态调整优化
- ¥20 关于c++的问题 如何用qt完成
- ¥15 台达变频器MS300与伺服驱动器B3系列的抱闸与电路设计如何实现
- ¥20 C++通过HICON获取argb像素数组
- ¥15 如何利用支持向量机提高分类器正确率和筛选理想分类器
- ¥15 Pygame坦克大战游戏开发实验报告
- ¥15 用vmmare虚拟机用sentaurus仿真的时候,调用terminal程序,输入swb指令弹出这个,打不开workbench,桌面上面的sentaurus workbench也打不开
- ¥75 使用winspool.drv的SetPrinter设置打印机失败
- ¥15 simulink 硬件在环路仿真
- ¥15 python动态规划:N根火柴摆出的最大数字