ubuntu 获取错误“\342”、“\200”和“\214”[重复]

7gs2gvoe  于 2023-04-29  发布在  其他
关注(0)|答案(4)|浏览(134)

此问题已在此处有答案

Compilation error: stray ‘\302’ in program, etc(12个回答)
9年前关闭。
我正在尝试为一个简单的游戏编写一个程序,但我在Ubuntu 13中使用g++和gedit时出现错误,分别为“\342”、“\200”和“\214”。10(多汁蝾螈)。
代码为:

#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。

slhcrj9b

slhcrj9b1#

您在代码中的>>之后使用了Zero Width Non Joiner字符。这是一个Unicode字符,以UTF-8编码为三个字符,值为0xE 2、0x 80和0x 8 C(或以8为基数,\342、\200和\214)。这可能是因为您从文档(HTML网页?)使用那些特殊字符。
C++ 要求整个程序主要使用ASCII编码,除了字符串或字符文字的内容(可能是依赖于实现的编码)。因此,要解决问题,请确保您只使用简单的ASCII空格,引号,双引号,而不是智能字符。

2izufjch

2izufjch2#

cin >>‌ a;

我将其复制粘贴到Python中,发现在>>和以下空格之间有3个字符:\xe2\x80\x8c。将它们解码为UTF-8,得到ZERO WIDTH NON-JOINER
我不知道它是怎么进入你的代码的。找出来你用的编辑器有什么有趣的吗?你的键盘布局?

cnjp1d6j

cnjp1d6j3#

除了上面提到的,你还有一个错误是关于在其作用域之外使用变量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语句中使用它是非法的。

uxh89sit

uxh89sit4#

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

去掉<200c>,你应该能够很好地编译。根据您使用的编辑器,您可能会看到也可能不会看到它这样打印出来。

相关问题