鱼C论坛

 找回密码
 立即注册
查看: 2631|回复: 8

C语言scanf录入字符,字符串

[复制链接]
发表于 2023-3-23 13:30:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 gudanbeiying 于 2023-3-23 15:26 编辑

当用scanf录入一个字符串的时候会把最后的回车记录在缓冲区里,当下一次用scanf录入一个字符的时候会把缓冲区里的回车直接录入。
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         char a[10];
  5.         char b;
  6.         printf("输入a:");
  7.         scanf("%s",a);
  8.         printf("a = %s",a);
  9.         printf("输入b:");
  10.         scanf("%c",&b);
  11.         printf("b = %c",b);
  12.     return 0;
  13. }
复制代码
  这里我输入 a回车,会直接跳过b的输入,因为b直接被缓冲区的回车赋值了。

但是为什么要是我将b设置为字符数组,然后第二个scanf给b录入字符串:
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         char a[10];
  5.         char b[10];
  6.         printf("输入a:");
  7.         scanf("%s",a);
  8.         printf("a = %s",a);
  9.         printf("输入b:");
  10.         scanf("%s",&b);
  11.         printf("b = %s",b);
  12.     return 0;
  13. }
复制代码
   这里我输入 aaa回车,结果为a = aaa输入b:(这里我输入bbb回车)bbb(回车),结果为b=bbb
为什么第二段代码在赋值b的时候没有被缓冲区的回车影响,可以正常输入,而且在输出b的时候也没有体现出回车符号,而只有bbb?第一次scanf输入是缓冲区留下的回车去哪了?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-3-23 13:58:52 | 显示全部楼层
isdkz 发表于 2023-3-23 13:39
问题的关键在于scanf的使用方式和字符串格式化输入的处理。

在第一个代码示例中,当你使用scanf("%c", & ...

懂了懂了,我还想问就是,我在做PAT考试题的时候,在我用scanf录入了一个整型变量的前提下比如 5回车,然后下面我要给字符型数组录入字符串,我用scanf %s,系统就不给我判满分,但是我把scanf换成,getchar();先清理掉缓冲区的回车,然后用gets()录入字符串就是满分,那scanf写法没啥问题呀,为啥就不是满分呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-23 15:32:27 | 显示全部楼层
dolly_yos2 发表于 2023-3-23 14:13
会不会这个要录入的字符串可能含有空格等空白字符? %s 会在遇到这类字符时停止,而 fgets 会读入直到 ...

不太清楚,这个题没涉及到文件呀,fgets不是从文件中录入吗,我作题的时候这两种写法的运行结果完全一样,各种情况也都没问题,我自己也调试过在缓冲区有回车的时候,下面用scanf录入字符串,确实不会把回车录到字符串内,但考试系统就是不给这个scanf写法打满分
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-23 15:48:13 | 显示全部楼层
dolly_yos2 发表于 2023-3-23 15:35
标准输入也是文件(stdin)
我指的情况是这个字符串里面有空格,可以试一下用 scanf 读入带空格的字符串 ...

带空格的话就只会录入空格之前的,比如 aaa bbb就只会录入aaa
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-21 11:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表