回 帖 发 新 帖 刷新版面

主题:基础问题

问题1:
#include <iostream>

using namespace std;

int main()
{
   char ch;
   cin.get(ch);
   while (cin.fail()==false)
   {
      cout<<ch;
     cin.get(ch);
   
   }
   return 0;
 }

这个程序为什么将while (cin.fail()==false)换成while (cin)这样子?

上面那个程序我知道什么意思了  按下ctrl+z    cin.fail()将返回ture
但换成while (cin)就不知道为什么了  甚至可以说是一头雾水,不知道到底在干什么,
还希望高手帮忙作答。谢谢。

问题2:

#include <iostream>

using namespace std;

int main()
{
   char ch;
   
   while (cin.get(ch))
   {
       cout<<ch;  
   }

   return 0;


 }

这个程序也不懂?是不是cin.get(ch)一遇到ctrl+z就返回true?  
cin.get(ch)这个不是返回一个对象吗?对象怎么是true?

回复列表 (共4个回复)

沙发

换成while (cin)这样子?
和 不换是一样的效果

while() 判断条件是否满足并不是 单纯的 true 和false

而是 是否为 0.

比如下面:
如果:
char* p=0;

while(p)
{
  //...不会执行
}

但是:
char* p="xxx";

while(p)
{
  //...会执行
}

板凳

[quote]换成while (cin)这样子?
和 不换是一样的效果

while() 判断条件是否满足并不是 单纯的 true 和false

而是 是否为 0.

比如下面:
如果:
char* p=0;

while(p)
{
  //...不会执行
}

但是:
char* p="xxx";

while(p)
{
  //...会执行
}[/quote]


谢谢你的回答  
char* p=0;


while(p)
{
  //...不会执行
}

这里的p不是一个地址吗? 怎么就将一个地址做为测试循环条件呢?
while循环的测试条件如果为非零  则继续执行循环体,这里P是一个地址   地址不可能为0吧  为什么不会执行呢?

3 楼

#include <iostream>

using namespace std;

int main()
{
   char ch;
   cin.get(ch);
   while (cin)
   {
      cout<<ch;
     cin.get(ch);
   
   }
   return 0;
}
我的书上面这样写的当输入成功(ctrl+z)的时候  cin将转换为  ture;
既然是ture  那为什么不继续循环呢?
              

4 楼

我的书上面这样写的当输入成功(ctrl+z)的时候  cin将转换为  ture;
既然是true  那为什么不继续循环呢?

什么书上说的???
当成功输入 ctrl+z 后,cin 应该变为无效了,也就是cin.fail() 将为true;

这里的p不是一个地址吗? 怎么就将一个地址做为测试循环条件呢?
地址是什么?
地址不是也是一个值么.
什么样的一个值?
类似 0x00000000 这样的,因为前面已经给出了 char* p=0;所以...

我来回复

您尚未登录,请登录后再回复。点此登录或注册