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

My program always stops working :S (C++)

本文关键字:c++ 停止工作 程序 我的      更新时间:2023-10-16

我编写了一个程序来从文件中获取数据,它工作了,但随后程序说它停止工作了。下面是我的代码:

#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 filen");
}

int main()
{
    show();
}

您的函数声明返回string,但没有返回语句。这是c++中的"未定义行为"(只允许在main中省略返回语句,在这种情况下,c++将自动假定return 0; -但在我看来,也总是写它更好)。

fgetc man说:

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

当循环到达文件末尾时,fgetc返回EOF,这是int类型。当您将其强制转换为字符时,您的条件将始终返回true。在测试c的值是否为EOF之前,必须将c的类型更改为int。

必须返回一些字符串,例如返回";

问候。

string show()更改为void show()。你的问题就解决了。

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

首先:决定这必须是C还是c++。在c++中还有其他读取文件的方法(参见std::fstream)

第二:删除不需要的头文件。包括stdio和iostream(它们做类似的事情,一个用于C,另一个用于c++,意味着不清楚你真正想做什么!)

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

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

第五:fgetc返回int。您很可能会遇到EOF陷阱。