【问题标题】:sublime text doesn't proceed my code after cin. what should I do?sublime text 在 cin 之后不会继续我的代码。我该怎么办?
【发布时间】:2016-11-25 17:33:42
【问题描述】:

全部

我对编程很陌生,目前正在使用 sublime 文本编辑器自学 C++。我遇到了一个问题,即通过 cin 输入内容后代码无法继续。例如,

#include <iostream>
using namespace std;

int main() {
  string password = "password";
  cout << "Enter your password: " << flush;

  string input;
  cin >> input;

  if(input == password) {
    cout << "Password accepted." << endl;
  } else {
    cout << "Access denied." << endl;
  }
  return 0;
}

在我输入后,它不会显示“密码接受”或“访问被拒绝”等任何内容。有谁知道如何解决这个问题并使其工作?谢谢。

【问题讨论】:

  • 你是从终端运行那个程序的吗?
  • 我可以告诉你代码在 c++ shell (cpp.sh/7g26n) 上编译。但是请不要像那样比较字符串,唯一可能起作用的原因是字符串池。使用 if (input.compare(password) == 0) 代替。
  • @JulianDeclercq 在 C++ 中使用 operator== 函数重载对 std::string 进行字符串比较非常好。您似乎在考虑 Java。
  • 输入“密码”后,您是否按回车键?这就是导致终端程序实际将输入“发送”到进程的原因。
  • 最后,这与您使用的文本编辑器有什么关系? Sublime Text 不是Integrated Development Environment (IDE)。如果您将其配置为实际构建和运行您的程序,它仍然不是运行您的程序的 Sublime Text,它会创建一个带有外壳的终端窗口来为您执行此操作。

标签: c++


【解决方案1】:

这是一篇旧帖子,但由于我遇到了同样的问题,而且这是我搜索它时弹出的第一页,所以我将发布我认为最适合其他新手的解决方案(这个术语在 Eve 之外有效吗?在线?谁知道...)。

请记住我也是新手,我所说的可能是错误的方法,对你不利,但它会让你开始......

选项 1: 按照大家的建议,使用 Sublime 文本在终端上编辑和运行文件。在最初的几次之后,它变得非常重复和烦人。只要你知道怎么做,你应该没问题。不推荐。

选项 2: 使用 VS Code 或其他 IDE。这个问题是 sublime text 启动速度更快,这就是我喜欢 subl 的主要原因。老实说,VS 代码也很快且响应迅速,我认为切换到它并不是一个坏主意。

选项 3: 如果您仍想继续使用 Sublime 文本。为他们所谓的竞争性编程进行设置。跳过 'bits/stdc++.h' 部分并执行其他所有操作。请点击此链接:https://www.geeksforgeeks.org/setting-up-sublime-text-for-cpp-competitive-programming-environment/

在极少数情况下,此网页将来会停止存在:

第 1 步: 安装 mingw/mingw64 编译器并将其添加到路径中。 (你会发现很多资源可以帮助你)。

第 2 步:

  • (i) 打开 Sublime Text 编辑器,然后转到 Tools > Build System > New Build System

  • (ii) 将以下代码粘贴到文件中并保存。

{
    "cmd": ["g++.exe", "-std=c++17", "${file}",
            "-o", "${file_base_name}.exe",
            "&&", "${file_base_name}.exe<inputf.in>outputf.out"],
    "shell":true,
    "working_dir":"$file_path",
    "selector":"source.cpp"
}
  • (iii) 将文件命名为“CP.sublime-build”(或其他任何名称,只需命名您知道的名称,以便您可以从 Tools > Build system list 中找到它。同时使一定要保留 '.sublime-build' 部分。)

第 3 步: 创建这三个新文件并将它们保存在同一个文件夹中。 (将其保存在您存储代码的地方或类似的地方)。

file.cpp: 编写代码的文件。

inputf.in: 我们将提供输入的文件。

outputf.out:将显示输出的文件。

//也不要更改这些文件的名称,因为这是我们之前的代码的一部分。

第四步:设置窗口布局:

-选择视图>布局>列:3。这将在工作区中创建三列。将这三个文件移动到三列中。

-选择查看>组>最大列:2

-选择我们刚刚从 Tools > Build System > CP (或您命名的任何名称)创建的构建系统。

这将为您在 subl 中同时编写和运行/测试代码创建一个实时环境。 o7

【讨论】:

    【解决方案2】:

    在 Submlime 中执行此操作的一种方法是创建一个新的构建系统。

    1. 转到工具 > 构建系统 > 新构建系统..
    2. 将以下内容粘贴到打开的文件中并保存。

      { "cmd": ["bash", "-c", "/usr/bin/g++ '${file}' -o '${file_path}/${file_base_name}' && open -a Terminal.app '${file_path}/${file_base_name}'"] }

      *这是针对 Mac OSX 的,您可以根据自己的环境进行更改。

    3. 将构建系统更改为保存的名称

    下次构建时,会有一个新的终端应用程序窗口等待输入 cin。

    【讨论】:

      【解决方案3】:

      如前所述,您的代码确实按预期工作。

      问题是当你用 sublime text 构建一个 c++ 程序时,它会编译那个文件然后运行。您看到的是 sublime text 将程序的输出通过管道传输回 sublime text 中的窗口。

      Sublime 无法将输入发送回您的程序。因此,为什么您的程序“在我通过 cin 输入内容后无法继续”。在 sublime 的 linux 版本上有一些插件可以访问完整的终端模拟器,我没有尝试使用其中之一,但它们确实存在。

      我建议你学习如何通过命令行使用 gnu 工具链。

      【讨论】:

        猜你喜欢
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-16
        • 2021-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多