首先说一下正确使用freopen的方式
/*将 <题目cpp文件名> 替换为cpp文件名
freopen("<题目cpp文件名>.in", "r", stdin);
freopen("<题目cpp文件名>.out", "w", stdout);
*/
//number.cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("number.in", "r", stdin);
freopen("number.out", "w", stdout);
// 以下开始解题代码
.
.
.
.
.
.
fclose(stdin); //本行不是必须
fclose(stdout); //本行不是必须
return 0;
}
错误实例
绝大部分来自于SC CSP-J的代码
没有代码的
存错目录了,存错盘符等没有按要求放cpp文件的
四川没有代码的,
SC-Junior @SC
ntotal 793, lost 16:
SC-00033 SC-00060 SC-00110 SC-00112 SC-00123 SC-00131 SC-00153 SC-00185 SC-00227 SC-00308 SC-00381 SC-00387 SC-00432 SC-00561 SC-00715 SC-00781
SC-Senior-day1 @SC
ntotal 807, lost 2:
SC-00215 SC-00637
SC-Senior-day2 @SC
ntotal 807, lost 11:
SC-00024 SC-00144 SC-00158 SC-00169 SC-00215 SC-00419 SC-00463 SC-00591 SC-00637 SC-00758 SC-00787
据说有个省(好象是河南)是要确保每个人的代码是正常收集到了的
没用使用freopen:
此种情况在洛谷等网站评测时需要注释掉freopen,所以不会爆0,甚至是高分
重定向文件名多了空格
下图黑色位置多了一个空格
我测了一下在windows系统中文件名最后的空格不影响结果。但在linux中是读不到输入数据的。NOI评测是在linux中,所以会爆0
freopen("number.in ", "r", stdin);
freopen("number.in", "r", stdin);
此种情况在洛谷等网站评测时需要注释掉freopen,所以不会爆0,甚至是高分
/写成\
// 以下一行在Windows DevC++是正确的,但在NOI Linux中是错误(编译都过不了)
#include <bits\stdc++.h>
// 以下一行在Windows DevC++和NOI Linux中都是正确的。
#include <bits/stdc++.h>
用了freopen,但文件名不正确,输入没有.in, 输出没有.out
此种情况在洛谷等网站评测时需要注释掉freopen,所以不会爆0,甚至是高分
文件错写为.txt
此种情况在洛谷等网站评测时需要注释掉freopen,所以不会爆0,甚至是高分
命令行调试后没有取消注释
此种情况在洛谷等网站评测时需要注释掉freopen,所以不会不问题
拷贝文件或另存为没有改文件名
如下图是number.cpp 对应的重定向文件应该为number.in , number.out
把.out错误地写成.ans
.ans文件是标准答案
把.inn错误地写成.in.txt,把.out错误地写成.out.txt
写法错误,编译都通不过的
freopen 写错成preopen
就想问一句编译能通过吗? 估计就没编译过代码。
stdin 写错成"stdin"
编译也通不过啊.