
本篇文章主要介绍一下
while((ch=getchar()!=EOF))
相关问题
1️⃣分别介绍getchar
和EOF
2️⃣while(ch=getchar()!=EOF)
和while((ch=getchar())!=EOF)
的区别
3️⃣while((ch=getchar())!=EOF)
如何结束
4️⃣int ch
和char ch
的区别
1️⃣分别介绍getchar
和EOF
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 ch
和char 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;
}
最后:文章有什么不对的地方或者有什么更好的写法欢迎大家在评论区指出 |