Не понимаю, почему этот std :: cout печатает это

Я получил это 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.

почему вывод, что я не понимаю и как мне это исправить.

и я использую предварительный просмотр Visual Studio Express 2013 для рабочего стола Windows.

0

Решение

В вашем если заявление, вы фактически присвоили $ ch : if(ch = '$'), Это должно быть:

if(ch == '$')

Кроме того, ваш реальный результат будет выглядеть так: hhiict1 = 2, ct2 = 0, так как вы написали cout << ch; два раза в вашем заявлении.

0

Другие решения

Во-первых, в этом коде есть проблема, если (ch = ‘$’),
во-вторых, я думаю, что реальный результат равен «hhct1 = 1, ct2 = 0», потому что, когда символ равен ‘$’, он может попасть в цикл.

2

Вы используете оператор присваивания = вместо == в условии if.
Я бы посоветовал.

if('$' == ch)
0

while ((ch = cin.get()) != '$')
{
cout << ch;
ct1++;
if (ch = '$') // << here is the heck
^^^     // did you mean == ?
ct2++;
cout << ch;
}
0
По вопросам рекламы ammmcru@yandex.ru