scanf上的文档说明格式中的任何"非空格字符"会导致函数从流中读取下一个字符,将其与此非空白字符进行比较,如果匹配,则将其丢弃并继续执行格式的下一个字符.如果字符不匹配,则函数失败,返回并保留流的后续字符未读.
但是,如果我跑:
int x;
while(scanf("\n%d",&x)==1) printf("%d\n",x);
Run Code Online (Sandbox Code Playgroud)
通过以下输入:
1 2
Run Code Online (Sandbox Code Playgroud)
它打印:
1
2
Run Code Online (Sandbox Code Playgroud)
鉴于这两个数字中没有'\n',为什么scanf会读取它们?这不是针对文档的吗?
在链接到您引用的段落之前的同一页面上,我看到:
- 空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空格字符(空格字符包括空格,换行符和制表符 - 请参阅isspace).格式字符串中的单个空格验证从流中提取的任何数量的空白字符(包括无).
A \n是一个空白字符.
因此,电话
scanf("\n%d",&x)
Run Code Online (Sandbox Code Playgroud)
stdio在读取数据之前,将提取并丢弃任意数量的空白字符&x.
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |