|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 gudanbeiying 于 2023-3-23 15:26 编辑
当用scanf录入一个字符串的时候会把最后的回车记录在缓冲区里,当下一次用scanf录入一个字符的时候会把缓冲区里的回车直接录入。
- #include<stdio.h>
- int main()
- {
- char a[10];
- char b;
- printf("输入a:");
- scanf("%s",a);
- printf("a = %s",a);
- printf("输入b:");
- scanf("%c",&b);
- printf("b = %c",b);
- return 0;
- }
复制代码 这里我输入 a回车,会直接跳过b的输入,因为b直接被缓冲区的回车赋值了。
但是为什么要是我将b设置为字符数组,然后第二个scanf给b录入字符串:
- #include<stdio.h>
- int main()
- {
- char a[10];
- char b[10];
- printf("输入a:");
- scanf("%s",a);
- printf("a = %s",a);
- printf("输入b:");
- scanf("%s",&b);
- printf("b = %s",b);
- return 0;
- }
复制代码 这里我输入 aaa回车,结果为a = aaa输入b:(这里我输入bbb回车)bbb(回车),结果为b=bbb
为什么第二段代码在赋值b的时候没有被缓冲区的回车影响,可以正常输入,而且在输出b的时候也没有体现出回车符号,而只有bbb?第一次scanf输入是缓冲区留下的回车去哪了? |
|