我的程序总是停止工作:S (c++)
My program always stops working :S (C++)
我编写了一个程序来从文件中获取数据,它工作了,但随后程序说它停止工作了。下面是我的代码:
#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声明。你根本就没在用!这样做的目的是什么?
第四:show
中string
的目的是什么?字符串是c++类型,在一个程序中,所有输入都是用C写的,你没有返回任何东西!
第五:fgetc
返回int。您很可能会遇到EOF陷阱。
相关文章:
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- 自 Windows 10 20H1 以来,具有单独线程的多个窗口停止工作
- C++代码停止工作错误使用cout内部函数
- LoadImage 在 Windows 更新后停止工作
- C++程序工作,但 Windows 显示"程序.exe已停止工作"
- VS 代码 C/C++ 智能感知在更新后停止工作
- 不使用与左右停止工作命名空间 std 的简单比较
- 为什么通过定义另一个指针单元格,整个代码停止工作?
- 德拉吉诺 LG01-S 收到异常数据包并停止工作
- G++ 在生成文件中使用时停止工作
- 当循环在条件C++之前停止工作时
- GCC:--静态链接到pthread的整个存档配方在最近的GCC版本中停止工作
- 正则表达式代码无缘无故停止工作
- 我的代码在第 4 个选择后停止工作
- 读取二进制文件大小的短自上周以来停止工作
- C++ 已停止工作静态映射函数
- Vscode 自动格式化代码在运行几次后停止工作
- 程序 使用链表插入数据时停止工作
- 当我尝试输入时程序停止工作
- C++参数化构造函数使代码在传递大输入时停止工作