我制作了一个程序来从文件中获取数据,它可以工作,但程序说它已经停止工作了。 这是我的代码:
#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();
}
答案 0 :(得分:4)
您的函数被声明为返回string
,但没有返回语句。
这是&#34;未定义的行为&#34;在C ++中(仅在main
中,您可以省略return语句,在这种情况下,C ++将自动假设return 0;
- 但IMO更好,也总是写它。)
答案 1 :(得分:1)
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声明。你根本就没用过!那个目的是什么?
第四:string
中show
的目的是什么? string是一个C ++类型,在一个程序中,所有输入都是用C编写的。你没有返回任何东西!
第五:fgetc
返回int。您最有可能遇到EOF pitflall。