`
dowhathowtodo
  • 浏览: 828035 次
文章分类
社区版块
存档分类
最新评论

acm程序调试过程中freopen函数的使用

 
阅读更多
使用的调试环境为gdb, 编译器为gcc,g++。(服务器就是用的这个)
每当做ACM题目的时候都是写好程序然后运行,输入题目中所给的测试数据,但是调试往往不
是一次两次就能解决问题的。一般的题目还行。遇到像 Web Navigator 这样的有大量的输入的题目
就头痛了。而freopen函数就提供了一种非常简单的解决方法。

函数名:freopen
声明:FILE *freopen( const char *path, const char *mode, FILE *stream );
所在文件: stdio.h
参数说明:
path: 文件名。
mode: 文件打开的模式。和fopen中的模式(如r, w,)相同。
stream: 一个文件,通常使用标准流文件(stdin, stdout, stderr)。
返回值:成功,则返回一个path所指定的文件的指针。失败,返回NULL。(一般都不使用它的返回值)

功能:简单说,就是实现重定向。把预定义的几个标准流文件(stdin, stdout, stderr)定向到由path指定的文件中。
如下例:
int main()
{
// freopen("debug//in.txt","r",stdin);
while(cin>>ans)
{
//to do .......
}
cout<<endl;
return 0;
}
freopen("debug//in.txt","r",stdin)的作用就是把stdin重定向到debug//in.txt文件中,这样在用cin或是
用scanf输入时便不会从标准输入流提取数据。而是从in.txt文件中获取输入。只要把输入事先粘贴到
in.txt,调试时就方便多了。
------------------------by 王海斌




但并不存在一个完全兼容的解决方案能够在以后将标准句柄恢复。在C标准库里面是没有办法的。
很容易想到的方式是重新打开标准控制台设备文件,但遗憾的是,这个设备文件的名字是操作系统相关的。

* 在DOS/Win中,这个名字是CON,因此可以使用
PLAIN TEXT
C++:
1.
freopen("CON", "r", stdin)

* 在linux中,控制台设备是 /dev/console
PLAIN TEXT
C++:
1.
freopen("/dev/console", "r", stdin)

另外,在类unix系统中,可以使用dup系统调用来预先复制一份原始的stdin句柄。


---------------------------by skywind


Addition:

我用的是Red Flag Linux5.0
用 freopen("/dev/console", "r", stdin); 无法恢复
将"/dev/console"改为"/dev/tty"成功了

进行如下操作:

[code@tzq ~]$ echo "hello" > /dev/tty
hello
[code@tzq ~]$ echo "hello" > /dev/console
bash: /dev/console: 权限不够
[code@tzq ~]$

不知道是不是不是root,权限不够的原因。
分享到:
评论

相关推荐

    ACM教程 程序调试方法

    本教程将介绍如何使用Code::Blocks这个流行的开源IDE进行程序调试。Code::Blocks的调试功能强大,适合初学者和高级用户。首先,确保你已经安装了Code::Blocks的正确版本,这里推荐使用8.02版,因为它的函数头文件与...

    ACM顺手拈来的常用函数.

    在ACM(国际大学生程序设计竞赛)中,参赛者经常需要用到一些特定的函数来快速解决各种算法问题。这些函数涵盖了广泛的领域,包括基础数学、几何、数论等。以下是一些ACM竞赛中常见的函数及其详细解释: 1. **基础...

    ACM考试题 ACM程序设计

    ### ACM程序设计基础知识点 #### 一、ACM竞赛概览 - **组织机构与活动**: 本课程由东北林业大学陈宇老师负责,通过邮箱Lg_chenyu@yahoo.com.cn进行联系。课程的主要目的是介绍ACM程序设计的基础概念及入门技巧。 - ...

    acm常用字符串处理函数

    在ACM(国际大学生程序设计竞赛)中,字符串处理是一项重要的技能,因为它涉及到许多实际问题的解决方案。这里我们将深入探讨一些常用的字符串处理函数,并通过具体的示例来理解它们的使用。 首先,`strstr()`函数...

    C语言与ACM程序设计介绍

    ACM程序设计是计算机科学教育中的一个重要部分,它强调算法设计、问题解决和高效的编程技巧。本资料集将深入探讨C语言和ACM程序设计的关联及其核心知识点。 一、C语言基础 1. 变量与数据类型:C语言提供多种基本...

    acm程序设计曾宗根(主要看第二章,用STL解题会很方便)

    - **背景与意义**:ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest, ACM/ICPC)是由ACM(美国计算机协会)主办的一项全球性的大学生程序设计比赛,被认为是规模最大、水平最高、影响...

    c++ reference 标准c++库 ACM程序设计曾宗跟

    《C++ Reference:标准C++库 ACM程序设计 曾宗根》是一本深入解析C++标准库,并结合ACM程序设计实践的专业书籍。C++是一种强大的面向对象编程语言,其标准库是C++编程的核心组成部分,包含了大量的工具、类和函数,...

    ACM函数整理_ACM模板

    在ACM(国际大学生程序设计竞赛)中,经常会遇到各种类型的算法和函数模板,这些模板帮助参赛者快速解决特定类型的问题。以下是一些常见的ACM函数模板及其详细说明: 一、数学问题 1. 精度计算:在处理大数运算时,...

    acm程序设计竞赛

    ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest,简称ACM-ICPC)是一项全球性的编程比赛,旨在激发大学生对计算机科学的兴趣,提升他们的编程技能和团队协作能力。这项竞赛通常由多...

    ACM函数模板Android源码

    在当今的编程竞赛中,尤其是涉及到算法竞赛如ACM(国际大学生程序设计竞赛)时,高效、规范的函数模板是提升编程速度和准确性的关键。本篇文章将围绕“ACM函数模板Android源码”这一主题,深入探讨相关知识点,包括...

    ACM各种函数模板

    在ACM竞赛和类似编程比赛中,掌握高效且实用的函数模板是至关重要的。这些模板能够帮助程序员快速解决各种算法问题,提高代码效率。以下是一些关键的函数模板及其详细解释: 1. **精度计算** - **大数阶乘**:在...

    ACM实用函数选.doc

    在ACM编程中,理解并熟练使用这些函数可以极大地提高代码的效率和简洁性。它们可以帮助快速处理输入数据、进行数学运算以及在数组中查找特定元素。熟悉这些基本函数是ACM参赛者必备的技能之一,因为它们能够简化问题...

    ACM程序设计题目

    ACM(国际大学生程序设计竞赛,英文全称:International Collegiate Programming Contest)是全球最具影响力的计算机科学竞赛之一,旨在培养大学生的创新思维和团队合作能力,提高他们在算法设计、问题解决以及编程...

    acm程序设计(曾棕根)

    《acm程序设计》是为编程爱好者精心打造的一本教程,尤其适合那些对算法和ACM国际大学生程序设计竞赛有浓厚兴趣的人群。本书深入浅出地讲解了ACM竞赛中常用的编程技巧和核心算法,旨在提升读者在解决复杂计算问题上...

    组合数学之母函数介绍 acm 相关

    本文将详细介绍母函数的概念及其在ACM竞赛中的应用。 ### 普通型母函数 普通型母函数源于二项式定理,它表示的是多项式 `(1+x)^n` 展开后的形式。这个公式告诉我们,当你从n个不同元素中选择0到n个元素时,所有...

    ACM程序设计指导电子书

    课程内容通常包括但不限于数据类型、控制结构、函数、数组、指针、结构体、文件操作等基本概念,以及算法设计、调试技巧、代码优化等高级技能。 #### 三、课程作业要求及提交规范 在40课时的学习周期内,学生被...

    ACM程序比赛的题目

    在准备ACM程序比赛的过程中,参赛者需要不断训练自己在以下几个方面的能力: 1. **算法基础**:理解和掌握基础算法,如快速排序、二分查找、Dijkstra最短路径算法等。 2. **数据结构**:熟练运用数组、链表、栈、...

    ACM程序设计(高清带书签)

    ACM竞赛中许多问题需要数学思维来分析和解决问题,良好的数学功底能使解题过程更为顺畅。 此外,书中的题目与解读部分,会给出历年的竞赛题目和详细的解答过程,这对于熟悉ACM比赛的题型和解题思路极其重要。通过...

Global site tag (gtag.js) - Google Analytics