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

在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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀