关于c的2个问题

xjbx
博客专家认证
2001-07-19 05:58:30
1、#include <stdio.h>
void main()
{
char s1[5],s2[5];
scanf("%4s",s1);
scanf("%4s",s2);
}
//如果在第一个scanf输入较长的字符串,
//多余的字符串会留在缓冲区中,并自动
//赋值给s2, 怎样避免这种情况?

2我在使用C++时不同的类对象的节点用链表连起后存档,
在读档时入何知到那但是属于那个类对象的,是否可在每个
类中添加一个标志域,一起存档,读档时在辨认。
请高手给于指点。





...全文
131 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
FireBow 2001-07-20
  • 打赏
  • 举报
回复
关注
seedundersnow 2001-07-20
  • 打赏
  • 举报
回复

不要用scanf()! 我发现,这是我出错最多的一个函数,而且不容易调试,我现在遇到这样的需求宁愿自己写一个函数....是不是我太笨?

xjbx 2001-07-20
  • 打赏
  • 举报
回复
对于第一个问题:我照你说的在两个scanf()中间加了一句printf("%s",s1);但输入较长的字符串时,输出只显示了前4个字符,s2好像还是自动被赋值了...如果在scanf("%4s",s2);后再加上printf("%s",s2);一句,从运行结果可以看出s2的确被自动赋值了!
如果在第一个scanf输入较长的字符串, 多余的字符串会留在缓冲区中,并自动 赋值给s2, 怎样避免这种情况?应如何解决呢?
phoenix96_2000 2001-07-19
  • 打赏
  • 举报
回复
char * garbage;

在两个scanf之间加入
scanf("%s",garbage);
washliu 2001-07-19
  • 打赏
  • 举报
回复
你在两个scanf()语句之间加一个输出语句就可以了。


当你存档时加一个标记就可以了呀,不用在类中加,这样会耗资源的!
dsli 2001-07-19
  • 打赏
  • 举报
回复
是不是可以在第一个scanf()后清一下缓冲区
自己编个函数清还冲区
xjbx 2001-07-19
  • 打赏
  • 举报
回复
没人帮我么?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧