泛泛杨舟i 2017-07-23 12:13 采纳率: 0%
浏览 4858

在scanf里,%c和%s,还有 %s的问题(注意这个%s前加了一个空格)

今天写门禁系统遇到一个问题,调试了很久,虽然达到了想要的效果,但是搞不懂为什么要这样写,如下:

#include
int main(){
char door[5];
int i;
printf("请选择门号:");
scanf("%d",&i);
printf("请输入第%d号门的权限:",i);
scanf("%c",&door[i]);
return 0;
}
运行结果如下:图片说明

图片说明
#include
int main(){
char door[5];
int i;
printf("请选择门号:");
scanf("%d",&i);
printf("请输入第%d号门的权限:",i);
scanf(" %c",&door[i]);
return 0;
}
运行结果如下:
图片说明

然后这样
#include
int main(){
char door[5];
int i;
printf("请选择门号:");
scanf("%d",&i);
printf("请输入第%d号门的权限:",i);
scanf("%s",&door[i]);
return 0;
}
运行结果如下:
图片说明

我就不明白了为什么%c和%s还有 %c(前面加有一个空格)会有这些结果,对于输入字符串是该用%s,可我这儿是输入Y和N,是一个字符,为什么还要用%s呢,用%c就不对呢?

  • 写回答

4条回答 默认 最新

  • 798VHS 2017-07-24 01:48
    关注

    因为你前面输入门号的时候需要按下回车键来转入下一个scanf,也就是说你输入的是一个数字+一个字符。

    如果要第二个scanf用%c得到自己输入的字符,可在第一个scanf和第二个scanf之间加入一个getchar来取掉输入数字时输入的字符。

    之所以用 空格%c 和%s能够不需要getchar掉跟随数字进入缓冲区的那个字符是因为 scanf的格式匹配字符串中空格表示空白字符的占位符(任何空白字符都会自动匹配上这个空格,所以相当于这个空白字符被getchar掉了)

    而%s则会忽略前导的空白字符(刚好这个空白字符在取掉数字后就位置就处于第一位了,也被忽略掉了)

    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧