此问题已在此处有答案:
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。
4条答案
按热度按时间slhcrj9b1#
您在代码中的
>>
之后使用了Zero Width Non Joiner字符。这是一个Unicode字符,以UTF-8编码为三个字符,值为0xE 2、0x 80和0x 8 C(或以8为基数,\342、\200和\214)。这可能是因为您从文档(HTML网页?)使用那些特殊字符。C++ 要求整个程序主要使用ASCII编码,除了字符串或字符文字的内容(可能是依赖于实现的编码)。因此,要解决问题,请确保您只使用简单的ASCII空格,引号,双引号,而不是智能字符。
2izufjch2#
我将其复制粘贴到Python中,发现在
>>
和以下空格之间有3个字符:\xe2
\x80
\x8c
。将它们解码为UTF-8,得到ZERO WIDTH NON-JOINER。我不知道它是怎么进入你的代码的。找出来你用的编辑器有什么有趣的吗?你的键盘布局?
cnjp1d6j3#
除了上面提到的,你还有一个错误是关于在其作用域之外使用变量player_choice。
它是在上面代码片段之前的while循环中定义的,在退出循环后被销毁。所以在if语句中使用它是非法的。
uxh89sit4#
我复制粘贴了你的代码片段,完全没有修改,发现你在
cin >>
后面有一个非常奇怪的空格字符。看下面:去掉
<200c>
,你应该能够很好地编译。根据您使用的编辑器,您可能会看到也可能不会看到它这样打印出来。