【问题标题】:If-Else statement only performing elseIf-Else 语句只执行 else
【发布时间】:2015-10-27 02:30:02
【问题描述】:

我正在尝试使用 SteamKit2 创建一个用于 Steam 的聊天机器人。我在程序可以读取的文本文档中有一组预定义的消息,但我希望它在收到的消息不在此列表中时说出特定的响应。我尝试使用 if-else 语句,但是当我向机器人发送消息时,它只回复 else 响应,而不是预定义的响应。

while ((rLine = sReader.ReadLine()) != null) {
    string text = rLine.Remove(rLine.IndexOf('|') - 1);  //message | response
    string response = rLine.Remove(0, rLine.IndexOf('|') + 2) ;
    string realText = text.ToLower();

    if (callback.Message.Contains(realText) || callback.Message.Contains(text))
    {
        steamFriends.SendChatMessage(callback.Sender, EChatEntryType.ChatMsg, response);
        Console.WriteLine("Someone has messaged me, and I replied with an automated message.");
        sReader.Close();
        return;
    } else {
        steamFriends.SendChatMessage(callback.Sender, EChatEntryType.ChatMsg, "I don't know what you mean. Could you maybe write it a bit differently? <3");
        Console.WriteLine("Someone has messaged me, and it wasn't on my auto-response list: {0}",callback.Message);
        sReader.Close();
        return;
    }
}

谢谢。

【问题讨论】:

  • 那是因为你(大概)循环遍历文件中的每一行。但是,如果找不到,您将立即返回。您的 else 块应该在 while 循环之外。
  • 澄清一下,除非您输入的文本位于文件的第一行,否则else 将始终执行。 else 块应该仅在文本文件中的 none 行与回调消息匹配时执行。
  • 我该怎么做?当我将 else 块移出 while 循环时,出现错误。另外,我正在遍历文件中的每一行。谢谢
  • 你能给我更多的信息,而不仅仅是“错误”吗?无论如何,请参阅我的回答,它应该开箱即用。

标签: c# if-statement steam


【解决方案1】:

改写成这样:

while ((rLine = sReader.ReadLine()) != null) {
    string text = rLine.Remove(rLine.IndexOf('|') - 1);  //message | response
    string response = rLine.Remove(0, rLine.IndexOf('|') + 2) ;
    string realText = text.ToLower();

    if (callback.Message.Contains(realText) || callback.Message.Contains(text))
    {
        steamFriends.SendChatMessage(callback.Sender, EChatEntryType.ChatMsg, response);
        Console.WriteLine("Someone has messaged me, and I replied with an automated message.");
        sReader.Close();
        return;
    }
}

steamFriends.SendChatMessage(callback.Sender, EChatEntryType.ChatMsg, "I don't know what you mean. Could you maybe write it a bit differently? <3");
Console.WriteLine("Someone has messaged me, and it    wasn't on my auto-response list: {0}",callback.Message);
sReader.Close();
return;

【讨论】:

  • 每当您输入不在列表中的内容时,它都会崩溃。当我把 else 放在它周围时,在 while 循环结束时显示错误:“} 预期”。
最近更新 更多