关于C语言scanf函数的用法

WindleSuntains 2017-08-16 08:39:52
为什么这个代码执行到最后一个scanf函数会直接跳过输入呢?
...全文
298 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
PHuiC 2017-08-17
  • 打赏
  • 举报
回复
在每一条scanf语句后面加一条fflush(stdin);来清空输入缓冲区。
赵4老师 2017-08-17
  • 打赏
  • 举报
回复
请判断scanf函数的返回值!
WindleSuntains 2017-08-17
  • 打赏
  • 举报
回复
谢谢大神指导malloc,但那个scanf又调试了一下,temp里面还是之前读进去的内容,没有再读进换行啊......
WindleSuntains 2017-08-17
  • 打赏
  • 举报
回复
scanf函数返回值为0,fflush与rewind以后可以读。
另外将代码改成下面也可以读。
WindleSuntains 2017-08-17
  • 打赏
  • 举报
回复
谢谢各位大神前辈们指点,我回去按各位所说调试一下
赵4老师 2017-08-17
  • 打赏
  • 举报
回复
引用 8 楼 bie_niu1992 的回复:
第一个for循环里 scanf("%s",temp);改成 scanf("%s%*c",temp); %*c的作用是读入\n,否则后面scanf("%[^\n]",temp);读入的将是\n就直接跳过了 建议后面的scanf("%[^\n]",temp); 也加入%*c
可惜的是%*c只能跳过一个\n
别逗爷很凶 2017-08-17
  • 打赏
  • 举报
回复
第一个for循环里 scanf("%s",temp);改成 scanf("%s%*c",temp); %*c的作用是读入\n,否则后面scanf("%[^\n]",temp);读入的将是\n就直接跳过了 建议后面的scanf("%[^\n]",temp); 也加入%*c
赵4老师 2017-08-17
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。
jena_wy 2017-08-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/wyyy2088511/article/details/76850232
自信男孩 2017-08-16
  • 打赏
  • 举报
回复
应该是上面的输入的回车符匹配了最后的scanf。 malloc的参数都有问题,这个程序运行起来可能会出段错误; 第一个malloc应该是
pri = malloc(sizeof(privaledge) * p);
第二个malloc应该是:
posi = malloc(sizeof(position) * r);
WindleSuntains 2017-08-16
  • 打赏
  • 举报
回复
有没有大神帮忙解答一下啊。。。。。。

69,369

社区成员

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

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