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

时间:2013-07-12 11:17:23

标签: c++ while-loop cout cin

我得到的是下面的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预览。

4 个答案:

答案 0 :(得分:2)

首先,此代码存在问题,如果(ch =&#39; $&#39;), 第二,我认为实际输出是&#34; hhct1 = 1,ct2 = 0&#34;,因为当char等于&#39; $&#39;时,可以进入循环。

答案 1 :(得分:0)

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

if(ch == '$')

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

答案 2 :(得分:0)

如果条件允许,您使用赋值运算符=而不是==。 我建议。

if('$' == ch)

答案 3 :(得分:0)

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