首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中,freopen()导致无限循环!

在C中,freopen()导致无限循环!
EN

Stack Overflow用户
提问于 2011-04-11 09:14:20
回答 3查看 830关注 0票数 1

我使用C中的freopen()函数从文件Data.txt读取数据,并将相同的数据写入输出文件Output.txt .This,这是我编写的代码。

代码语言:javascript
复制
#include<stdio.h>
#include<conio.h>

int main(void)
{
    int i,diff,number_of_inputs,num1,num2;
    freopen("Data.txt","r",stdin);
    freopen("Output.txt","w",stdout);
    scanf("%d",&number_of_inputs);
    for(i=0;i<number_of_inputs;i++)
    {
        scanf("%d %d",&num1,&num2);
        printf("%d %d",num1,num2);  
    }
    fclose(stdin);
    fclose(stdout);
    getch();
    return 0;
}

Data.txt文件包含:

3.

10 12

10 14

100 200

但是输出文件包含大量的垃圾数字,给人一个无限loop.Can的印象,有人告诉我出了什么问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-11 09:26:28

您需要通过调试器运行代码。我认为这样的问题可能是显而易见的。

尽管如此,您可以对任何库调用执行没有错误检查。如果其中任何一个失败,您的变量中只会有垃圾值。

票数 2
EN

Stack Overflow用户

发布于 2011-04-11 09:25:39

您的代码需要检查来自freopen()scanf()的返回值。

从这两个函数中的任何一个得到一个意想不到的返回值将为您提供错误所在的线索。

freopen()返回NULL以指示错误。

scanf()返回已转换的项目数,即EOF

在这两种情况下,您的代码都可以检查errno的值,以找出导致错误的原因。您可能希望使用perror()打印它。

票数 2
EN

Stack Overflow用户

发布于 2011-04-11 09:23:20

除了缺少换行符之外,这在我的机器上似乎运行得很好--输出是10 1210 14100 200,当适当地换行时,它会给出

代码语言:javascript
复制
10 12
10 14
100 200

而且,getch()是一个奇怪的选择,因为您刚刚在stdin上调用了fclose()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5619110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档