嗨我正在尝试为一个简单的游戏编写一个程序,但是在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。
答案 0 :(得分:8)
您在代码中的>>
后使用了Zero Width Non Joiner个字符。这是一个unicode字符,以UTF-8编码为三个字符,值为0x2e
,0x80
,0x8c
(或在基数为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 >>
之后有一个非常时髦的空格字符。看下面:
摆脱<200c>
,你应该能够编译得很好。根据您使用的编辑器,您可能会或可能无法看到它打印出来。