eof造成死循环

eof造成的死循环

int main()
{
	using namespace std;
	const char filename[] = "c:\\2.txt";
	ifstream fin;
	string temp;

	fin.open(filename);
	//if (!fin.is_open())
	//{
	//	cout << "不能打开文件"<< filename << endl;
	//	exit(EXIT_FAILURE);
	//}
	int count = 0;
	
	while(fin.eof()!=EOF)
	{
		count++;
		getline(fin, temp);
		cout<<temp<<endl;
	}
	fin.close();
	cout << "文件" << filename << "共有"
		<< count << "行。\n";
	return 0;
}

这个代码会造成死循环,错误原因:1.没有判断是否存在;2.由于eof返回false.所以导致死循环.

当然可以!在 C 语言中,**使用 `EOF`(End Of File)作为输入结束的判断条件是非常常见且有效的方法**,尤其适用于从标准输入(键盘)或文件中读取多个数据的情况。 --- ### ✅ 使用 `EOF` 判断输入结束的原理 函数 `scanf()` 的返回值表示**成功读取的项数**。当没有更多输入(比如用户输入结束或文件读取完毕)时,`scanf()` 会返回 `EOF`。 --- ### ✅ 示例代码:使用 `EOF` 控制输入循环 ```c #include <stdio.h> int main() { int num; int count = 0; printf("请输入一系列整数(以 EOF 结束输入):\n"); while (scanf("%d", &num) != EOF) { if (num % 4 == 0 || num % 7 == 0) { count++; } } printf("4 或 7 的倍数共有:%d 个\n", count); return 0; } ``` --- ### ✅ 如何触发 `EOF`? - **在 Windows 系统中**:按下 `Ctrl + Z`,然后按回车; - **在 Linux/macOS 系统中**:按下 `Ctrl + D`; --- ### ✅ 优点 - 适合处理**批量输入**或**文件输入**; - 不需要用户输入特殊值(如 `-1`)来结束循环; - 更加“自动化”,适合脚本或文件处理; --- ### ❗ 注意事项 - 如果输入中混杂了**非数字字符**(如字母),`scanf("%d")` 会失败,且不会自动跳过,可能造成**死循环**; - 建议搭配输入清理机制使用(如配合 `getchar()` 清除非法字符); --- ### ✅ 改进版:防止死循环(加入错误处理) ```c #include <stdio.h> int main() { int num; int count = 0; printf("请输入一系列整数(以 EOF 结束输入):\n"); while (1) { int result = scanf("%d", &num); if (result == EOF) break; if (result != 1) { // 输入非法,跳过当前字符 scanf("%*[^\n]"); // 跳过当前行中非数字部分 getchar(); // 吃掉换行符 continue; } if (num % 4 == 0 || num % 7 == 0) { count++; } } printf("4 或 7 的倍数共有:%d 个\n", count); return 0; } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值