知识大全 C与C++中标准输入实现方式上的一点区别

Posted 字符

篇首语:健儿须快马,快马须健儿。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C与C++中标准输入实现方式上的一点区别相关的知识,希望对你有一定的参考价值。

C与C++中标准输入实现方式上的一点区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

刚开始学C语言时遇到一个问题 如下代码

   以下是引用片段   #include    int main()      char a b;   printf( Please input the first character: );   scanf( %c  &a);   printf( Please input the second character: );   scanf( %c  &b);   printf( The o characters are %c  %c  a  b);   return  ;   

  程序运行结果如下

  

  而下面这段程序却可以正常运行

   以下是引用片段   #include    int main()      char a;   int b;   printf( Please input the first character: );   scanf( %c  &a);   printf( Please input the second integer: );   scanf( %d  &b);   printf( The o characters are %c  %d  a  b);   return  ;   

  运行结果如下

  

  当时对这个问题很困惑 时间一长就慢慢淡忘了

  昨天一个同学问到一个C++运算符重载的问题 如下代码 其中的while循环起什么作用 好像注释掉后程序运行没什么差别

   以下是引用片段   iostream& operator >> (iostream& is  b& s)      char temp[b::MAX] =  ;   is get();   is get(temp  b::MAX);   if(strlen(temp)> )      strncpy(b str  temp  b::MAX);      while(is && is get()!=   )      continue;      return is;   

  其中 b为一个自定义的类型 其中含有一个 char str[b::MAX] 的私有成员 b::MAX为一个代表字符串长度的宏定义

  可见 当通过>>输入字符串的长度超过b::MAX长度时 while循环就起作用了 它会丢弃超过b::MAX长度的输入缓冲区的内容 直到换行符出现为止 实际上就是一个清缓冲区的功能 以待下一次重新输入字符串 为了验证我的分析 做了如下测试

   以下是引用片段   b b  b ;   cin >> b ;   cin >> b ;   b show();   b show();

  果然 当输入字符串小于b::MAX时一切正常 当超过b::MAX时 当输入完第一个字符串回车后 没等输入第二个字符串 程序就把b 和b 的内容都显示出来了 而b 的内容正是输入的字符串超过b::MAX长度的部分 说明前面的分析是正确的

  今天又想起这个问题 突然联想到以前C语言的两个scanf连用产生的问题 灵机一动 难道也是输入缓冲区没有自动清空产生的问题?当连续用scanf输入两个字符的时候 输入第一个字符后回车 结果换行符被当作第二个字符输入了 scanf可不会区分什么换行符还是普通字符 而当输入一个字符 再输入一个整数时 因为类型不匹配的原因 scanf会将换行符忽略而等待输入正确的整数后才返回 所以得到了正确的结果 哈哈 原来如此!!!

  不禁又想 C++中引入了新的iostream流库 它又是怎样处理这个问题的呢?于是做了下面的实验

   以下是引用片段   #include    using namespace std;   int main()      char a  b;   cout <<  Please input the first character: ;   cin >> a;   cout <<  Please input the second character: ;   cin >> b;   cout << a <<   << b;   return  ;   

  当输入a回车 输入b回车时 运行结果如下

  

  当连续输入多个字符时 运行结果如下

  

cha138/Article/program/net/201311/13289

相关参考

知识大全 自然吸气和涡轮增压的区别与作用

自然吸气和涡轮增压的区别与作用自然吸气和涡轮增压是发动机两种不同的进气方式。1、自然吸气是汽车进气的一种,是在不通过任何增压器的情况下,大气压将空气压入燃烧室的一种形式。自然吸气发动机在动力输出上的平

知识大全 厦门那里有培训C语言,或者是C++的,我是新手,我想去学校学习程式设计,知道的说下地址和联络方式吧

厦门那里有培训C语言,或者是C++的,我是新手,我想去学校学习程式设计,知道的说下地址和联络方式吧!  以下文字资料是由(全榜网网www.cha138.com)小编为大家

当正压式消防空气呼吸器气瓶公称容积的总和大于()时,中压导气管应通过三通输出接头(其中一个应有防护套)与供气阀连接管上的输入接头相连接;或由两根分别带输出接头的中压导气管中的一根与供气阀连接管上的输入

电力安全生产知识竞赛题:当正压式消防空气呼吸器气瓶公称容积的总和大于()时,中压导气管应通过三通输出接头(其中一个应有防护套)与供气阀连接管上的输入接头相连接;或由两根分别带输出接头的中压导气管中的一

当正压式消防空气呼吸器气瓶公称容积的总和大于()时,中压导气管应通过三通输出接头(其中一个应有防护套)与供气阀连接管上的输入接头相连接;或由两根分别带输出接头的中压导气管中的一根与供气阀连接管上的输入

电力安全生产知识竞赛题:当正压式消防空气呼吸器气瓶公称容积的总和大于()时,中压导气管应通过三通输出接头(其中一个应有防护套)与供气阀连接管上的输入接头相连接;或由两根分别带输出接头的中压导气管中的一

知识大全 java语言与c++相比,有哪些优点?

java语言与c++相比,有哪些优点?主要是这两种开发者对内存地址变量的不同理解,使两种语言在编程的思维上有所差异。C中存在指针变量,而且每个指针对应着一个真实的物理内存地址,他可以对相应地址中的内存

知识大全 C++中,c_str()的用法

C++中,c_str()的用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!C++中,c_str(

履约保证保险与担保方式的区别

履约保证保险与担保方式的区别履约保证保险相对于保险公司而言仅仅是他们所开展的一项保险业务,但是针对银行而言,履约保证保险则是一种不折不扣的足以使其放心的担保方式。而从履约保证保险的最终的作用来看,它也

下列观点中,对利润率与剩余价值率的区别和联系表述错误的一项是

下列观点中,对利润率与剩余价值率的区别和联系表述错误的一项是_____。A、剩余价值率是基础,利润率是它的转化形式B、两者在量上完全一致C、利润率一般会小于剩余价值率D、剩余价值率反映资本家的剥削程度

纳税人缴纳税收与归还银行贷款在性质上的根本区别是前者具有__

纳税人缴纳税收与归还银行贷款在性质上的根本区别是前者具有_____。A、固定性B、广泛性C、强制性D、无偿性答案:C解析:缴纳税收是义务,当无法收取时,国家可以采取强制措施进行征收。归还银行贷款也是义

知识大全 Java与C++

Java与C++  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java特别象C++由此很自然地