Alexander Wu 2016-05-22 03:28 采纳率: 100%
浏览 1890
已采纳

关于C语言scanf输入的问题(清除缓存区好像没有用)

一道作业题,题目是这样的
图片说明

我尝试用这个来输入p1:

for(i=0;*(p1+i)!='\0';i++){
    scanf("%c",p1+i);
}

可是输入完字符串之后 回车 不能结束输入:
图片说明

我查了一下资料,有人说是缓存区没有清空,让我加一个getchar(),或者用fflush(),可是都没有解决问题...
没办法,我改成了这样:
图片说明

现在输入的问题解决了,输出又有问题了...
之前用scanf输入和 用 getchar 输入 整个程序输出的结果竟然不一样...

贴上前后完整的代码对比:

图片说明
图片说明

前后输出的结果对比:

图片说明
图片说明

总结一下我的问题是:

1.为什么scanf这样不能结束输入?应该怎么改?

2.我觉得scanf和之后改的getchar在这里功能应该是一样的,为什么程序最后输出的结果不一样?(两个输出的结果都不对,正确的应该是2)

谢谢大家!

  • 写回答

3条回答 默认 最新

  • 小灸舞 2016-05-22 05:11
    关注

    你这个逻辑有点问题:
    你想,如果我当次读到了'\n',但由于之后会i++,所以*(p1+i)已经是后面一位的字符了
    PS:你这样写也就LINUX下GCC能运行了,在VS下肯定崩,指针都没分配空间就直接写入

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100