如何在Mac上为C ++加载文件

时间:2019-01-07 06:16:08

标签: c++

我正在尝试使用ifstream使用C ++加载我的文件,但是那根本行不通。我在Mac上使用Atom和Xcode作为编译器。

这会弹出:

dyn3180-214:~ joshua$ /var/folders/y6/jrfdjlsx0nqcxyfvsrfw6bnw0000gn/T/excersice ; exit;
file was not opened correctly
logout
#include <iostream>
#include <fstream>
#include <cstdlib>

int main(){
  std::ifstream infile;
  infile.open("numbers.txt");
  if(!infile.is_open()){
    std::cout<<"file was not opened correctly"<<std::endl;
    exit(EXIT_FAILURE);
  }
  int n;
  while(infile>>n){
    std::cout<<n<<std::endl;
  }
  return 0;
}

2 个答案:

答案 0 :(得分:1)

同时阅读how to debug small programsdocumentation of GDB(或计算机上安装的任何调试器)。

使用所有警告和调试信息编译程序(即C ++文件,将其命名为josh.cc,如问题所示)。我建议在命令行中使用g++ -Wall -Wextra -g josh.cc -o joshprog对其进行编译((有关详细信息,请阅读how to invoke GCC),然后使用gdb ./joshprog对其进行调试,并在终端上以./joshprog

重点是您的IDE (Atom + XCode)对您没有帮助。它会为您隐藏重要的详细信息(请参见this答案,它也适用于MacOSX或其他Unix系统)。这就是为什么我强烈建议您使用 explicit commands编译(以及运行和调试)您的代码的原因,而您正在为您的terminal emulator输入shell (因此,请阅读您正在使用的每个命令的文档)。一旦能够熟练地在Unix系统上进行编译,您最终可能会切换到IDE(但是您需要了解IDE代表您做什么以及它正在运行的命令)。

您可以通过使用working directory(在POSIX系统上需要 #include <unistd.h>)将显示当前getcwd的内容添加到代码中,例如

char mycwdbuf[80];
memset (mycwdbuf, 0, sizeof(mycwdbuf));
if (getcwd(mycwdbuf, sizeof(mycwdbuf)-1) != NULL)
   std::cout << "current directory is " << mycwdbuf << std::endl;

这样做,您可能会了解程序是如何启动的以及在哪个工作目录中。我想它不是在您想要的工作目录中启动的。

答案 1 :(得分:-1)

我认为,Xcode在不同目录中生成.o(目标文件)文件,而您的.txt在不同目录中。我用Xcode编写代码,它总是在不同目录中生成.o文件。