C语言中getchar()的用法详谈

  1. 大多数人只看getchar 名字,以为其返回值是char 类型。但是getchar 的确不是char 类型,而是int 类型,其原型如下:
    int getchar(void);

       getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.
    
        getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.
    
     getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)getchar()使用不方便,解决方法: (1)使用下面的语句清除回车:while(getchar()!='\n'); (2)用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要包含头文件<conio.h>
    
  2. getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了,第一次getchar()时,确实需要人工的输入,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了。实际上是 输入设备->内存缓冲区->程序getchar 你按的键是放进缓冲区了,然后供程序getchar 你有没有试过按住很多键然后等一会儿会滴滴滴滴响,就是缓冲区满了,你后头按的键没有存进缓冲区. 键盘输入的字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符直到’\n’.要理解这一点,之所以你输入的一系列字符被依次读出来,是因为循环的作用使得反复利用getchar在缓冲区里读取字符,而不是getchar可以读取多个字符,事实上getchar每次只能读取一个字符.如果需要取消’\n’的影响,可以用getchar();来清除,这里getchar();只是取得了’\n’但是并没有赋给任何字符变量,所以不会有影响,相当于清除了这个字符.还要注意的是这里你在键盘上输入ssss看到的回显正是来自于getchar的作用,如果用getchar就看不到你输入了什么

  3. 例子:#include <stdio.h>

main()

{

char ch1[10],ch2[10],c1,c2;

scanf("%s",ch1);

c1=getchar();

gets(ch2);

c2=getchar();

}

依次键入asdfg回车,asdfg回车,则ch1=“asdfg\0”,c1=’\n’,ch2=“asdfg\0”,c2需输入。

### C语言 `getchar` 函数的使用方法 在C语言中,`getchar()` 是一个标准库函数,用于从标准输入流(通常是键盘)读取单个字符。它的原型为 `int getchar(void)`[^2],返回值是一个整数类型的 ASCII 值,表示用户输入的字符;如果遇到文件结束符或发生错误,则返回特殊值 EOF(通常定义为 -1)。由于其返回值可能是负数,因此建议将返回值存储在一个 `int` 类型变量中,而不是 `char` 类型。 #### 示例代码 以下是一些常见的 `getchar()` 使用场景: ##### 1. 单次获取字符 此示例展示了如何通过 `getchar()` 获取并打印用户输入的一个字符。 ```c #include <stdio.h> int main() { int ch; printf("请输入一个字符: "); ch = getchar(); // 读取用户输入的字符 putchar(ch); // 打印该字符到屏幕 return 0; } ``` ##### 2. 连续获取多个字符直到按下回车键 在此示例中,程序会持续接收用户的输入,直到检测到换行符为止。 ```c #include <stdio.h> int main() { int ch; printf("连续输入字符 (按 Enter 结束): \n"); while ((ch = getchar()) != '\n') { // 当未接收到换行符时继续循环 putchar(ch); // 将输入的内容立即显示出来 } return 0; } ``` ##### 3. 判断是否达到文件末尾或发生错误 当需要判断输入流的状态时,可以利用 `EOF` 的特性来实现逻辑控制。 ```c #include <stdio.h> #define MAX_INPUT 100 int main() { char buffer[MAX_INPUT]; int i = 0, ch; printf("输入最多 %d 字符 (Ctrl+D 或 Ctrl+Z 表示结束):\n", MAX_INPUT); while (((ch = getchar()) != EOF) && (i < MAX_INPUT - 1)) { buffer[i++] = ch; // 存储每个有效字符至数组 } if (i >= MAX_INPUT - 1) { printf("\n警告:已超出最大允许长度。\n"); } else { buffer[i] = '\0'; // 添加字符串终止符 printf("您输入的是:%s\n", buffer); } return 0; } ``` 以上三个例子分别演示了不同的应用场景,包括简单的字符捕获、批量数据录入以及异常情况下的处理机制。 #### 特殊注意事项 - **返回值类型**:尽管 `getchar()` 主要用来读取字符,但由于它也可能返回 EOF (-1),所以推荐将其结果保存于 `int` 变量而非 `char` 中[^4]。 - **缓冲区行为**:某些终端可能会缓存按键操作直至用户提交整个行(比如敲击回车),这可能导致看似延迟的现象[^3]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值