这是我的代码:
int i,u,v = 0;
scanf("%d%d",&N,&M );
Edge.resize(N+1);
for( i=1;i<=M;i++){
scanf("%d%d",&u,&v );
Edge[u].push_back( v );
}
所以,我正在读取我输入的输入。示例:
6 7
1 2
1 3
2 4
3 5
4 5
5 6
3 4
但是为了更容易输入,我编译了我的文件。
g++ -O3 -ansi -Wall main.cpp -lm -o proj
并将这些数字插入到名为“tin1.in”的文件中。并尝试使用命令在终端中运行:
/.proj tin1.in
如果我手动输入,它可以完美运行,但是当我尝试自动运行时,它不会执行任何操作,它似乎会永远运行。有什么想法吗?
最佳答案
您的程序“不执行任何操作”,因为它已运行到 scanf
行并被阻止等待从命令终端接收标准输入。
./proj tin1.in
只设置 argv
的“第一个”元素到“tin1.in”。
此参数不会自动打开文件tin1.in
并阅读它。由您的程序来读取和解析 argv
并解释参数的含义并打开文件或采取其他操作,但[我假设]您的程序不包含任何执行此操作的代码,因此 tin1.in
不会发生任何事情。信息。
类unix操作系统中有一种内置的方法来重定向stdin。如果您希望将 stdin 重定向到文件,则需要使用命令 ./proj <tin1.in
运行 proj或cat tin1.in | ./prog
正如评论中推荐的那样。
关于c++ - 程序未运行输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22431777/