不明白为什么这个 std::cout 打印这个

Don't understand why this std::cout is printing this

本文关键字:cout 打印 明白 std 为什么      更新时间:2023-10-16

我得到的是下面的c++代码。

#include <iostream>
using namespace std;
int main()
{
char ch;
int ct1, ct2;
ct1 = ct2 = 0;
while ((ch = cin.get()) != '$')
{
    cout << ch;
    ct1++;
    if (ch = '$')
        ct2++;
    cout << ch;
}
cout << "ct1 = " << ct1 << ", ct2 = " << ct2 << "n";
system("pause");
return 0;
}

现在你可以判断如果输入会发生什么。

  hi$<ENTER>

输出应该是这样的。

hi ct1 = 2, ct2 = 0

但真正的产出是这样的。

h$i$ct1 = 2, ct2 = 2.

为什么它输出我不理解,我应该如何修复它。

我正在使用适用于windows桌面的Visual Studio Express 2013预览版。

首先,这段代码中有一个问题,如果(ch='$'),其次,我认为实际输出是"hhct1=1,ct2=0",因为当char等于"$"时,可以进入循环。

if语句中,您实际上将$分配给了ch:if(ch = '$')。这应该是:

if(ch == '$')

此外,您的实际输出将是这样的:hhiict1 = 2, ct2 = 0,因为您在while语句中写了两次cout << ch;

在if条件中使用赋值运算符=而不是==。我推荐。

if('$' == ch)
while ((ch = cin.get()) != '$')
{
    cout << ch;
    ct1++;
    if (ch = '$') // << here is the heck
          ^^^     // did you mean == ?
        ct2++;
    cout << ch;
}