在有和没有空格的情况下接受c ++中的字符

时间:2016-04-19 09:46:07

标签: c++

两个代码都接受字符的区别是什么?请注意第二种接受字符的方式有空格?

char c;
scanf("%c",&c);// first way
scanf(" %c",&c);// second way

4 个答案:

答案 0 :(得分:1)

您只需查看scanf ...

的文档
  

白色空间(如        格式字符串中的空格,制表符或换行符匹配任意数量的白色        输入中的空格,包括无。

答案 1 :(得分:1)

  

包含控制方式的字符序列的C字符串   处理从流中提取的字符:

     

空白字符:

     

该函数将读取并忽略任何空格字符   在下一个非空格字符(空白字符)之前遇到过   字符包括空格,换行符和制表符 - 请参阅isspace)。   格式字符串中的单个空格验证任何数量的空格   从流中提取的空白字符(包括无)。

     

非空白字符,格式说明符(%)除外:

     

任何不是空格字符(空格,换行符或制表符)或格式说明符的一部分(以%字符开头)的字符都会导致   函数从流中读取下一个字符,将其与之进行比较   这个非空白字符如果匹配,则被丢弃   该函数继续使用格式的下一个字符。如果   字符不匹配,功能失败,返回和离开   流的后续字符未读。

     

格式说明符:

     

由初始百分号(%)形成的序列表示格式   说明符,用于指定数据的类型和格式   从流中检索并存储到指向的位置   附加论点。

http://www.cplusplus.com/reference/cstdio/scanf/

答案 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清理事情!