c - C 中 scanf 函数的格式说明符中 %c 规范之前的空格

标签 c character scanf format-specifiers

当我在 scanf() 函数的格式字符串中的 %d%c 规范之间不包含空格时以下程序,并在运行时输入为“4 h”,然后输出为“Integer = 4 and Character=.

在这种情况下,变量 "c" 究竟是如何接受输入的,如果我在 %d%c 之间包含一个空格,它有什么区别 规范?

代码

#include <stdio.h>

int main()
{
    char c;
    int i;
    printf("Enter an Integer and a character:\n");
    scanf("%d %c",&i,&c);
    printf("Integer = %d and Character = %c\n",i,c);
    getch();
} 

最佳答案

如果您阅读了 scanf() 的规范仔细地,大多数格式说明符都会跳过前导空格。在标准 C 中,有三个没有:

  • %n — 到目前为止已经处理了多少个字符
  • %[…] — 扫描集
  • %c — 读取一个字符。

(POSIX增加了第四个,%C,相当于%lc。)

Input white-space characters (as specified by isspace) shall be skipped, unless the conversion specification includes a [, c, C, or n conversion specifier.

%d%c 之间添加空格意味着在读取整数之后和读取(不是空格)字符之前跳过可选的空格。

请注意,格式字符串中的文字字符(空格除外 - 例如,"X%dY" 中的 XY >) 不要跳过空格。匹配此类字符也不算成功转换;它们不会影响 scanf() 等的返回值。

关于c - C 中 scanf 函数的格式说明符中 %c 规范之前的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36504135/

相关文章:

python - 包含和分发具有 Python C 扩展的第三方库

Python 正则表达式查找所有单个字母字符

c - 使用 fscanf 从文件中读取格式化字符串

c - free() 上的段错误指向 char* 的指针

c - 更新一个点的位置

windows - Windows 文件名中元数据的分隔符

c - scanf 和错误的输入使输出变得奇怪

c - 请解释一下这个程序到底出了什么问题,我是新手

c - 在 github 上发布 API key

excel - 使用宏从 Excel 电子表格中删除任何非指定字符