【C语言】while((ch=getchar()!=EOF))相关问题详解(结束、安全)

本篇文章主要介绍一下while((ch=getchar()!=EOF))相关问题
​​1️⃣​分别介绍getcharEOF
​2️⃣​​while(ch=getchar()!=EOF)while((ch=getchar())!=EOF)的区别
​3️⃣​while((ch=getchar())!=EOF)如何结束
​4️⃣​​int chchar ch的区别

​1️⃣​​分别介绍getcharEOF

int getchar(void)
使用键盘输入字符,字符输入缓冲区,然后getchar()函数获得的字符是从输入缓冲区中提取的且每次只能提取一个字符,只有点击回车Enter,计算机刷新缓冲区,将这个缓冲区的内容打印出来。

示例:

#include<stdio.h>
int main()
{
	char ch = getchar();//输入字符
	putchar(ch);
	return 0;
}

EOF 的全称是end of file 通常在文件结尾来表示结束标志,或者文件读写出现了错误会出现
我们可以把EOF来当作-1来处理

#include<stdio.h>
int main()
{
	printf("%d",EOF);//结果为-1
	return 0;
}

2️⃣​​while(ch=getchar()!=EOF)while((ch=getchar())!=EOF)的区别

从下面的两段代码可以看出虽然就只是差了一个括号,但是输出的差距还是很大的,
这里的原因是因为!=的优先级要高于=,所以导致两段代码输出的差距。
这里还有一点是键盘输入字符要进入缓冲区,只有按下Enter才能进行输出,回车也是进入了缓冲区,所以回一并打印出来。

int main()
{
	int ch;
	while (ch = getchar() != EOF)
	{
		putchar(ch);
	}
	return 0;
}

在这里插入图片描述


int main()
{
	int ch;
	while (ch = getchar() != EOF)
	{
		putchar(ch);
	}
	return 0;
}

在这里插入图片描述
​3️⃣​while((ch=getchar())!=EOF)如何结束

输入EOF的方式是Ctrl+Z(在Linux系统下,利用快捷键Ctrl+D;在windows下用Ctrl+Z,然后在按下Enter就可以输入文件结束标志EOF了。 )可以理解成EOF=Ctrl+Z

​4️⃣​​int chchar ch的区别

也就是下面这段代码中这两种情况,虽然两种情况绝大部分是没什么区别的,
我个人理解是因为EOF当作-1,把负数放在字符类型是不正确的。
在书中《C和指针》中是这样写的,EOF需要的位数比字符型值所能提供的位数要多,这也是getchar返回一个整形值而不是字符型的原因。然而,把getchar的返回值首先储存到ch中将导致它截断。然后这个被截断的字符提升为整型并与EOF进行比较。当这段存在错误的伪代码在使用在有符号字符集的机器运行时,如果读取了一个\377的字节,循环将会终止,因为这个值截断在提升之后与EOF相等。当这段代码在使用无符号字符集的机器上运行时,这个循环将永远不会终止!

#include<stdio.h>
int main()
{
	int ch;
	//char ch;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch);
	}
	return 0;
}
最后:文章有什么不对的地方或者有什么更好的写法欢迎大家在评论区指出
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值