C++第四版的1.24习题有点不懂,上来请教一下。

时间:2022-10-04 17:57:47
作为这题的前半部分是懂的,但是后半部分真的不知道是怎么运算出来。
前面就不写了,直接入程序部分。
int main()
{
    int item1,item2;
    int count;
    cin >> item1;
    count = 1;
    if ( cin >> item2)
    ++count ;
    else{
    cout << count << endl;
    item1 = item2;
    count  = 1;
     }
     cout <<  count;
     return 0;
}
       前半部分可以如下面所表示:
 {
    int item1,item2;      // 定义两个整型。
    int count;            // 定义一个计数方式。
    cin >> item1;         // 输入读取第一个整型数据。
    count = 1;           //  计数初始化为1.
    if ( cin >> item2)   //  如果输入item2,条件为输入。
    ++count ;            //  计数自增。
         cout <<  count; //  输出最后得出的计数。
     return 0;
}
      在这一部分的运算我明白。但是在else这里就真的不知道怎么一个算法了。求大神们指教。

14 个解决方案

#1


这个有什么"算法"吗?

#2


没什么算法 就是输入两个整数..输出2

#3


真的不知道cin>>item2这个表达式的值是什么,不知道这个表达式的值有没有可能是0?

#4


懂了
cin >> item2的返回值还是cin,cin一个到void*的类型转换,如果IO状态存在错误的话这个转换返回0,否则返回(void*)this。所以,这个表达式除非出现IO错误的情况,否则肯定是非0。

#5


引用 3 楼 dourgulf 的回复:
真的不知道cin>>item2这个表达式的值是什么,不知道这个表达式的值有没有可能是0?

有输入为真,无输入为假.

#6


应该是item2不等于0时结果为2 等于0的话就是1.你把程序好好分析一下就懂了
这就是一个简单的if……else语句

#7


if ( cin >> item2) 条件是输入的值不为0

#8


引用 7 楼 wudanjs 的回复:
if ( cin >> item2) 条件是输入的值不为0


错!!!!打错特错!! 输入流右移运算符返回做运算值的值

#9


学习,,,,,,,,,,,,,,,,,,,,,,,,

#10


    条件应该是8楼那位才正确,因为在运算当中也是同样的,记得有人说过不要在WHILE语句中加上CIN>>这样的语句,但是我是新手,书中也是这样做的,如果不这样设置条件,真的不知道怎么设置。
    记得书中那条计算负数总数的题目,我自己做的和网上查的都是用的WHILE语句,其实我想知道这个题目用FOR语句怎么做出来,为什么没人用FOR语句呢?

#11


我上机测试一下此程序,发现红色部分没机会运行吧???
int main()
{
  int item1,item2;
  int count;
  cin >> item1;
  count = 1;
  if ( cin >> item2)
  ++count ;
   else{
  cout << count << endl;
  item1 = item2;
  count = 1;
  }
  cout << count;
  return 0;
}

#12


如果加个条件呢,那么是否可行?。头文件使用Sales_item.h
程序稍改一下,高手帮我看一下运行的算法,应该也是迗代吧?
int main()
{
   Sales_item item1,item2;
  int count;
  cin >> item1;
  count = 1;
  while ( cin >> item2)
  if ( item1.same_isbn(item2))
  ++count ;
  else{
cout << count << endl;
item1 = item2;
count = 1;
} cout << count;
  return 0;
}

#13


咦。。。看这种没括号的循环和判断真心难受

#14


cin>>item2的返回值只有真和假,即0和1,当输入正确且没有输入空(即null)时,返回值为1,否则返回值为0.
引用 4 楼 dourgulf 的回复:
懂了
cin >> item2的返回值还是cin,cin一个到void*的类型转换,如果IO状态存在错误的话这个转换返回0,否则返回(void*)this。所以,这个表达式除非出现IO错误的情况,否则肯定是非0。

#1


这个有什么"算法"吗?

#2


没什么算法 就是输入两个整数..输出2

#3


真的不知道cin>>item2这个表达式的值是什么,不知道这个表达式的值有没有可能是0?

#4


懂了
cin >> item2的返回值还是cin,cin一个到void*的类型转换,如果IO状态存在错误的话这个转换返回0,否则返回(void*)this。所以,这个表达式除非出现IO错误的情况,否则肯定是非0。

#5


引用 3 楼 dourgulf 的回复:
真的不知道cin>>item2这个表达式的值是什么,不知道这个表达式的值有没有可能是0?

有输入为真,无输入为假.

#6


应该是item2不等于0时结果为2 等于0的话就是1.你把程序好好分析一下就懂了
这就是一个简单的if……else语句

#7


if ( cin >> item2) 条件是输入的值不为0

#8


引用 7 楼 wudanjs 的回复:
if ( cin >> item2) 条件是输入的值不为0


错!!!!打错特错!! 输入流右移运算符返回做运算值的值

#9


学习,,,,,,,,,,,,,,,,,,,,,,,,

#10


    条件应该是8楼那位才正确,因为在运算当中也是同样的,记得有人说过不要在WHILE语句中加上CIN>>这样的语句,但是我是新手,书中也是这样做的,如果不这样设置条件,真的不知道怎么设置。
    记得书中那条计算负数总数的题目,我自己做的和网上查的都是用的WHILE语句,其实我想知道这个题目用FOR语句怎么做出来,为什么没人用FOR语句呢?

#11


我上机测试一下此程序,发现红色部分没机会运行吧???
int main()
{
  int item1,item2;
  int count;
  cin >> item1;
  count = 1;
  if ( cin >> item2)
  ++count ;
   else{
  cout << count << endl;
  item1 = item2;
  count = 1;
  }
  cout << count;
  return 0;
}

#12


如果加个条件呢,那么是否可行?。头文件使用Sales_item.h
程序稍改一下,高手帮我看一下运行的算法,应该也是迗代吧?
int main()
{
   Sales_item item1,item2;
  int count;
  cin >> item1;
  count = 1;
  while ( cin >> item2)
  if ( item1.same_isbn(item2))
  ++count ;
  else{
cout << count << endl;
item1 = item2;
count = 1;
} cout << count;
  return 0;
}

#13


咦。。。看这种没括号的循环和判断真心难受

#14


cin>>item2的返回值只有真和假,即0和1,当输入正确且没有输入空(即null)时,返回值为1,否则返回值为0.
引用 4 楼 dourgulf 的回复:
懂了
cin >> item2的返回值还是cin,cin一个到void*的类型转换,如果IO状态存在错误的话这个转换返回0,否则返回(void*)this。所以,这个表达式除非出现IO错误的情况,否则肯定是非0。