得到错误迷失'\ 342'和'\ 200'和'\ 214'

时间:2013-12-06 09:54:24

标签: c++ ubuntu g++

嗨我正在尝试为一个简单的游戏编写一个程序,但是在ubuntu 13.10中使用g ++和gedit得到错误'\ 342'和'\'200'以及'\ 214'。 代码是:

#include <iostream>
#include <cctype>

using namespace std;

char all_d()
{
    return 'D';
}

int main()
{
    bool more = true;
    while ( more )
    {
        cout << "enter C to cooperate, D to defect, Q to quit\n";
        char player_choice;
        cin >>‌ player_choice;

        if ( player_choice != 'C' || player_choice != 'D' || player_choice != 'Q' )
        {
            cout << "Illegal input.\nenter an other\n";
            cin >> player_choice;
        }

        char  cpu_choice = all_d();

        cout << "player's choice is " << player_choice << endl;
        cout << "cpu's choice is " << cpu_choice << endl;
    }

    if ( player_choice == 'Q' )
    {
        cout << "Game is Over!\n";
        more = false;
    }
}

和终端输出是:

IPD.cpp:18:3: error: stray ‘\342’ in program
   cin >>‌ player_choice;
   ^
IPD.cpp:18:3: error: stray ‘\200’ in program
IPD.cpp:18:3: error: stray ‘\214’ in program
IPD.cpp: In function ‘int main()’:
IPD.cpp:29:47: error: ‘end’ was not declared in this scope
   cout << "cpu's choice is " << cpu_choice << end;
                                               ^
IPD.cpp:32:7: error: ‘player_choice’ was not declared in this scope
  if ( player_choice == 'Q' )
       ^

甚至试图编译这个:

#include <iostream>

using namespace std;

int main()
{
    char a;
    cin >>‌ a;
}

终端又说:

a.cpp:8:2: error: stray ‘\342’ in program
  cin >>‌ a;
  ^
a.cpp:8:2: error: stray ‘\200’ in program
a.cpp:8:2: error: stray ‘\214’ in program

任何人都可以帮助我吗?

请注意我昨晚安装了ubuntu。

4 个答案:

答案 0 :(得分:8)

您在代码中的>>后使用了Zero Width Non Joiner个字符。这是一个unicode字符,以UTF-8编码为三个字符,值为0x2e0x800x8c(或在基数为8,\342,{{1} },\200)。这可能是因为您从使用这些特殊字符的文档(html网页?)中复制并粘贴了一些代码。

C ++语言要求整个程序主要使用ASCII编码,但字符串或字符文字的内容(可能是依赖于实现的编码)除外。因此,要解决您的问题,请确保您只使用简单的ASCII空格,引号,双引号而不是智能字符。

答案 1 :(得分:2)

cin >>‌ a;

我已将其复制粘贴到Python中,并发现在>>和以下空格之间有3个字符:\xe2 \x80 \x8c。将它们解码为UTF-8,然后得到ZERO WIDTH NON-JOINER

如何进入你的代码,我不知道。找出来。你正在使用的编辑器有什么有趣的吗?键盘布局?

答案 2 :(得分:2)

除了上述内容之外,还有一个与在其范围之外使用变量player_choice相关的错误。

while ( more )
{
    cout << "enter C to cooperate, D to defect, Q to quit\n";
    char player_choice;
    // other stuff
}

if ( player_choice == 'Q' )
{
    cout << "Game is Over!\n";
    more = false;
}

它在上面的代码片段之前的while循环中定义,并在退出循环后被销毁。因此在if语句中使用它是非法的。

答案 3 :(得分:1)

我复制粘贴了你的代码片段,完全没有修改,发现你在cin >>之后有一个非常时髦的空格字符。看下面:

enter image description here

摆脱<200c>,你应该能够编译得很好。根据您使用的编辑器,您可能会或可能无法看到它打印出来。