两个代码都接受字符的区别是什么?请注意第二种接受字符的方式有空格?
char c;
scanf("%c",&c);// first way
scanf(" %c",&c);// second way
答案 0 :(得分:1)
您只需查看scanf
...
白色空间(如 格式字符串中的空格,制表符或换行符匹配任意数量的白色 输入中的空格,包括无。
答案 1 :(得分:1)
包含控制方式的字符序列的C字符串 处理从流中提取的字符:
空白字符:
该函数将读取并忽略任何空格字符 在下一个非空格字符(空白字符)之前遇到过 字符包括空格,换行符和制表符 - 请参阅isspace)。 格式字符串中的单个空格验证任何数量的空格 从流中提取的空白字符(包括无)。
非空白字符,格式说明符(%)除外:
任何不是空格字符(空格,换行符或制表符)或格式说明符的一部分(以%字符开头)的字符都会导致 函数从流中读取下一个字符,将其与之进行比较 这个非空白字符如果匹配,则被丢弃 该函数继续使用格式的下一个字符。如果 字符不匹配,功能失败,返回和离开 流的后续字符未读。
格式说明符:
由初始百分号(%)形成的序列表示格式 说明符,用于指定数据的类型和格式 从流中检索并存储到指向的位置 附加论点。
答案 2 :(得分:1)
来自 cstdio 的documentation:
空格字符:该函数将读取并忽略在下一个非空格之前遇到的任何空格字符 字符(空白字符包括空格,换行符和制表符 字符 - 请参阅isspace)。格式字符串中的单个空格 验证从中提取的任何数量的空白字符 流(包括没有)。
因此,对于输入'asd'
,两个版本的c
值均为'a'
。但是,对于' asd'
的输入(请注意空格!),c
的值对于第一个版本为' '
,对于第二个版本为'a'
。
答案 3 :(得分:0)
第一种方法是尝试读取一个字符。 第二种方式将尝试读取一个或多个字符:首先是零个或多个空格字符,之后是非空格字符,这些字符将被放入' c'变量
但请注意, scanf 是一种C传统的输入方式,非常容易出错。与C++ Input/output library合作,您会感觉更好。像
这样的东西std::cin >> c;
或
std::cin.get(c);
将比 scanf 更安全,更好。
编辑:感谢Tony D清理事情!