我的程序总是停止工作:S(C ++)

时间:2011-09-19 06:15:21

标签: c++ io fstream

我制作了一个程序来从文件中获取数据,它可以工作,但程序说它已经停止工作了。 这是我的代码:

#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
string show()
{
    FILE *in;
    char c;
    in = fopen("version.txt", "r");
    if(in != NULL)
    {
        while((c = fgetc(in)) != EOF) 
        {
            putchar(c); 
        }
        fclose(in);
    }
    else printf("Unable to open file\n");
}


int main()
{
    show();
}

5 个答案:

答案 0 :(得分:4)

您的函数被声明为返回string,但没有返回语句。 这是&#34;未定义的行为&#34;在C ++中(仅在main中,您可以省略return语句,在这种情况下,C ++将自动假设return 0; - 但IMO更好,也总是写它。)

答案 1 :(得分:1)

fgetc man说:

fgetc() reads the next character from stream and returns it as an unsigned char cast to an int

当你的循环到达文件末尾时,fgetc返回一个int上的EOF。当你把它投射到一个char时,你的状态总是会返回true。如果c的值为EOF,则必须在测试之前将c的类型更改为int。

答案 2 :(得分:0)

您必须返回一些字符串,例如return“”;

问候。

答案 3 :(得分:0)

只需将string show()更改为void show()即可。这将解决您的问题。

答案 4 :(得分:0)

这里有很多错误或模糊的东西。

首先:确定这必须是C还是C ++。在C ++中,还有其他方法可以读取文件(参见std::fstream

第二:删除不需要的标题。包括stdio和iostream(制作类似的东西,一个用于C,另一个用于C ++,意味着对你真正想要做的事情有一个非常清楚的想法!)

第三:包括windows.h意味着编译所有的Windows API声明。你根本就没用过!那个目的是什么?

第四:stringshow的目的是什么? string是一个C ++类型,在一个程序中,所有输入都是用C编写的。你没有返回任何东西!

第五:fgetc返回int。您最有可能遇到EOF pitflall