C语言 | getchar(),putchar()

getchar()

原型:int getchar(void)
注意:getchar返回的是int型
(getchar()的返回值一般情况下是字符,但也可能是负值,即返回EOF。
这里要强调的一点就是,getchar函数通常返回终端所输入的字符,这些字符系统中对应的ASCII值都是非负的。因此,很多时候,我们会写这样的两行代码:
char c;
c = getchar();
这样就很有可能出现问题。因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+D(Linux下)即文件结束符EOF时,getchar ()的返回EOF,**这个EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。**为了能够让所定义的变量能够包含getchar函数返回的所有可能的值,正确的定义方法如下(K&R C中特别提到了这个问题):
int c;//正确定义
c = getchar();)

#include<stdio.h>
int main()
{int c;
while((c=getchar()) != EOF){
printf("c:%c ", c);}
return 0;
}
图1图1
#include<stdio.h>
int main()
{int c;
while((c=getchar()) != EOF){
printf("c:%c ", c);}//这里有两个空格
return 0;
}
图2图2
图1:getchar( )读入1、2、3后,再读入换行符,所以c: 3后面会有c: 并由换行的效果
图2:getchar( )读入1、2、3后,再读入换行符,下一行会有换行符后面的两个空格,所以456从3开始对齐。
在这里插入图片描述
图3:直接按Ctrl+Z,直接退出输入。
在这里插入图片描述
图4:getchar再读入1,2,3后,再读入Ctrl+Z,(不知道有没有读入,显示的是个 ▢),然后getchar就没有读入之后的回车键,光标仍在同一行。
在这里插入图片描述
图5:同图4,区别在于输入时在Ctrl+Z后面继续输入456后再输入的回车,说明输入123,再输入Ctrl+Z,继续输入任何东西包括回车都没有作用。
在这里插入图片描述
图6:在图5基础上的光标上处继续输入Ctrl+Z,就会退出输入。
总结:最好单个输入字符,当输入Ctrl+Z(EOF)就会停止输入。

#include<stdio.h>
int main()
{
char nchar1;
nchar1=getchar();
putchar(nchar1);
putchar(getchar());
return 0;
}
在这里插入图片描述
图7:getchar读入a后,回车也读入了
在这里插入图片描述
图8:getchar读入a后,剩下的a和回车在缓冲区等待输入,第二个getchar将第二个a读入并输出在屏幕,结束。
在这里插入图片描述
图9:getchar读入第一个a后,其余三个a及回车在缓冲区等待输入,单后面只有一个getchar,所以同图8。

#include<stdio.h>
int main()
{
char nchar1;
nchar1=getchar();
putchar(nchar1);
return 0;
}
在这里插入图片描述
图10:将源代码的putchar(getchar())删除后,只读入一个a就结束输入,回车仍在缓冲区。
注意:getchar()读入回车键不会换行
#include<stdio.h>
int main()
{
char nchar1;
nchar1=getchar(); //在输入设备得到字符
putchar(nchar1); //输出字符
putchar(’\n’); //输出转移字符换行
putchar(getchar()); //得到输入字符直接输出
putchar(’\n’); //换行
return 0;
}
其结果为:在这里插入图片描述
图11:这个代码输出总共5行,其中第4行不是换行,是getchar
在缓冲区读入的回车通过putchar输出,若将putchar(getchar())改为getchar(),则代码输出总共4行,原来的第4行没有了。
如下图12:
在这里插入图片描述
若是在该行已有输入字符,再按下ctrl+z,同时^ Z后面还可以输入其他字符,比如: abc^Zefg,然后再回车,将内容输入
则通过getchar()读到的字符内容是abc^ Z,其中^ Z是一个无法显示的特殊字符,而不再是EOF,同时^Z后面的所有内容,包括最后按下回车输入的不可见的换行符都将被清空,下次getchar读入的字符将会是键盘重新输入的字符。
#include<stdio.h>
int main( )
{
int c,next;
while((c=getchar())!=EOF){
printf(“c:%c\n”,c);
next=getchar();
printf(“next:%c\n”,next);
if(next= =EOF){
printf(“next get EOF\n”);
}
}
printf("\n=====>end:%c\n",c);
return 0;
}在这里插入图片描述
若zzz^ Zcc中的^Z为EOF,则上图13的最后的next应该要输出 next get EOF。所以 ^Z不再为EOF。
摘自:https://blog.csdn.net/qq_28193019/article/details/88111165

EOF作为文件结束符时的情况:
EOF虽然是文件结束符,但并不是在任何情况下输入Ctrl+D(Windows下Ctrl+Z)都能够实现文件结束的功能,只有在下列的条件下,才作为文件结束符。
(1)遇到getchar函数执行时,要输入第一个字符时就直接输入Ctrl+D,就可以跳出getchar(),去执行程序的其他部分;
(2)在前面输入的字符为换行符时,接着输入Ctrl+D;
(3)在前面有字符输入且不为换行符时,要连着输入两次Ctrl+D,这时第二次输入的Ctrl+D起到文件结束符的功能。
EOF作为行结束符时的情况:
这时候输入Ctrl+D并不能结束getchar(),而只能引发getchar()提示下一轮的输入。这种情况主要是在进行getchar()新的一行输入时,当输入了若干字符(不能包含换行符)之后,直接输入Ctrl+D,此时的Ctrl+D并不是文件结束符,而只是相当于换行符的功能,即结束当前的输入。
摘自:https://blog.csdn.net/shenxinyue123/article/details/7254025?utm_source=distribute.pc_relevant.none-task

putchar()

原型:int putchar(int char);
char-- 这是要被写入的字符。该字符以其对应的 int 值进行传递。

返回类型:该函数以无符号 char 强制转换为 int 的形式返回写入的字符。
(1)当输出正确的时候,返回输出字符转换为的unsigned int 值;
(2)当输出错误的时候,返回 EOF(End of file)文件结束符。
putchar函数的基本格式为:putchar©。

(1)当c为一个被单引号(英文状态下)引起来的字符时,输出该字符(注:该字符也可为转义字符);
(2)当c为一个介于0~127(包括0及127)之间的十进制整型数时,它会被视为对应字符的ASCII代码,输出该ASCII代码对应的字符;
(3)当c为一个事先用char定义好的字符型变量时,输出该变量所指向的字符。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值