声明变量时编译器错误

时间:2016-03-18 13:23:38

标签: c++

当此行不在评论中时:

double random_seed, participation_fee, ticket_revenue;

编译器会产生以下错误:

main.cpp:24:2: error: stray ‘\200’ in program
main.cpp:24:2: error: stray ‘\254’ in program
main.cpp:24:2: error: stray ‘\342’ in program
main.cpp:24:2: error: stray ‘\200’ in program
main.cpp:24:2: error: stray ‘\254’ in program

我已经尝试重新输入此行。我使用Sublime作为文本编辑器。如何解决这个问题?

这是整个功能:

void starting_game(vector<int>&players, vector<Player*> player_obj)
{

    int id, x, y, number=0;
    char pos;
    double random_seed,participation_fee,ticket_revenue;‬‬ 
    string input;
    cin >> number;
    for(int i = 0; i < number; i++)
    {
        cin >> id;
        cin.ignore(4,' ');
        cin >> x;
        cin.ignore(2,':');
        cin >> y;
        cin.ignore(2,':');
        cin >> pos;
        players.push_back(find_put(id, player_obj, x, y, pos));
    }
    //cin>>‫‪random_seed‬‬;//>>‫‪participation_fee‬‬>>‫‪ticket_revenue;‬‬
}

1 个答案:

答案 0 :(得分:2)

你的代码中有不可见的字符会阻止编译器正常工作,因为它无法处理它们。

在您的特定情况下,其中一个字符是U + 202c,使用UTF-8编码。它被称为&#34; POP DIRECTIONAL FORMATTING&#34;,并且是不可见的。

隐形,修复这个很难。甚至问题中的代码都包含该字符。

要解决此问题,您可以执行以下某些操作:

  • 尝试删除整行以及下一行,然后重新键入文本。在您的特定情况下,字符会留在行尾,如果您只是删除内容行并重新键入它,则可能会保留这些字符,而不会删除换行符。 (通过@PatrickTrentin

  • 使用删除所有非ascii字符的脚本。这很容易用python完成。将以下代码粘贴到名为script.py的文本文件中,然后使用python3执行它。

    #!/usr/bin/python3
    import argparse
    import sys
    
    parser = argparse.ArgumentParser()
    
    parser.add_argument("infile", type=argparse.FileType("rb"))
    parser.add_argument("outfile", type=argparse.FileType("wb"))
    
    args = parser.parse_args()
    
    with args.infile as inf:
       intext = inf.read().decode("utf-8")
       with args.outfile as outf:
          outf.write("".join(
              c for c in intext
              if ord(c) <= 127
          ).encode("utf-8"))
    

    用法为python3 script.py input output两次输入相同的名称,它将无效,您最终将使用空文件。在任何情况下,请在尝试之前备份文件!

  • 使用十六进制编辑器手动删除所有非ASCII字符。不幸的是,我不认识任何易于使用的人。

在这种情况下,删除没有替换的字符是正确的做法。在其他情况下(例如proposed duplicate),用更合适的东西替换有问题的字符更为正确。这不是这种情况。