getchar()函数的用法

统计从键盘输入一行字符的个数。
#include <stdio.h>
main(){
int n=0;
printf("input a string:\n");
while(getchar()!='\n') n++;
printf("%d",n);
}

getchar函数不是只接受第一个字符么,如果是的话,那不成了死循环了么?
getchar 函数的功能是从键盘上输入一个字符。
getchar 函数只能接受单个字符,输入多于一个字符时,只接
收第一个字符。
如何理解它能顺序接受一行字符呢?

是不是说,每输入一个字符就执行一次循环呢?

还是不太明白,能否劳驾告诉我一下,程序的执行过程,多谢了!

当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止。当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符。

getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾则返回-1(EOF),且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。

也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。










扩展资料 :

1、getchar

getchar由宏实现:#define getchar() getc(stdin)。getchar有一个int型的返回值。当程序调用getchar时.程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。

当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾(End-Of-File)则返回-1(EOF),且将用户输入的字符回显到屏幕。

如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。

2、getch

getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCⅡ码,出错返回-1。

输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行。

这个版本忽略了个重点,getch()是非缓冲输入函数,就是不能用getch()来接受缓冲区已存在的字符,如以下C++程序段,运行时如果输入1 2 3 a时必须用getchar()才能在后面程序获得正常输入,即使先前已经恢复流了,此处用getch()是万万不行的。

3、getche

这个函数与前两上类似,功能也相近,都是输入一个字符,返回值同样是输入字符的ASCII码,但不同的是,此函数在输入后立即从控制台取字符,不以回车为结束(带回显)。

参考资料来源:百度百科-getchar()

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-25
getchar();的用途是从从标准输入流读取一个字符,读回车符时退出。getchar();永远只向缓存中输入一个字符。
getchar();的用法很多:
一种就是清空回车符,这种情况一般发生在在循环中涉及到输入的情况。
还有一种是某些编译平台(IDE)在运行程序时并没有在程序运行后给人看结果的时间,这时候在程序最后加上getchar();就能造成程序的暂停,给程序员度结果的机会。
用getchar();时,在键盘上按一个字符后,要按回车才能读取进去;用getch();时,在键盘上按一个字符马上就被读取进去,不用按回车,因此可以作为“按任意键继续”的执行语句。
Example
为什么第一次循环x=getchar();没执行?而后几次却可以执行?把那句改为
cin;也是同样的效果。
#include
<iostream>
using
namespace
std;
int
main(){
char
s[3][4];
int
n;
char
x;
cin>>n;
for(;n>0;n--){
cout<<n<<"执行
getchar()
之前"<<endl;
x=getchar();
cout<<"执行完
getchar(),输入字符:"<<endl;
gets(s[0]);
gets(s[1]);
gets(s[2]);
}
}
因为你用getchar();只能接收到一个字符,当你输入n值后,你按了回车键,这个值在windows平台下是两个ASCII字符/n/r也就是回车换行,当回车时/n被控制台接收面/r没有,那么第一次进入for时getchar();就已经接收了/r所以就出现你看到情况了。
对,用cin当然是正确的。因为cin是一个istream的对象这个C++标准库里的类,它是把一切输入都流入这个对象,它每接收一个输入都放在流里,在底层会过滤掉一些没用的输入,它只会用户的有效输入置入变量就是它的工作方式。
第2个回答  2019-12-21
getchar有一个int型的返回值。当程序调用getchar时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。getchar函数的返回值是用户输入的第一个字符的ascii码,如出错返回-1,且将用户输入的字符回显到屏幕。1、str[i]=getchar()的意思是等待用户输入,将用户输入的值赋值给str[i](因为这句在循环语句中,所以是给str[]数组赋值)。2、printf("%s\n",str+m-1)的意思是从字符数组的第m个元素开始,输出后面的所有元素。str+m-1就是str[]数组的第m个元素的指针(地址)。
第3个回答  推荐于2017-09-15
这个样子的:
getchar()是到缓冲区读取第一个字符
首先,从键盘输入许多字符,最后回车后,所有字符包括回车放到缓冲区
这时才开始循环执行getchar(),读入一个字符判断是否回车,不是就继续读,是回车就退出循环(之所以说是顺序接受一行字符,是因为它取的始终是缓冲区中第一个字符,每取一个缓冲区的字符少一个,也就是顺序读取了)本回答被提问者采纳
第4个回答  2020-02-24
你从键盘打一个字符,然后按个回车Enter,把输入的字符赋给c变量,这时候你是输入了两个字符的,一个事你打的字符,另一个就是回车字符,打入的字符赋给了变量c,但回车字符还留在缓存区内,所以等到要输入下个字符的时候,不会让你输入的,直接把回车字符付给了c变量,加个getchar(),就是把缓存区里的回车字符拿走,可以让你输入下个字符。
你可以把这里的getchar()换成fflush(stdin)
清除标准输入设备缓存
也可以的
相似回答