我正在尝试使用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;
}
答案 0 :(得分:1)
同时阅读how to debug small programs和documentation 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文件。