getchar putchar应用实例
时间: 2024-10-30 21:07:17 浏览: 51
`getchar` 和 `putchar` 是 C 标准库中的两个字符输入输出函数,它们通常用于控制台程序中进行字符级别的交互。
`getchar` 函数从标准输入流 (通常是键盘) 读取一个字符,并返回对应的 ASCII 码值。例如:
```c
#include <stdio.h>
int main() {
char input;
printf("请输入一个字符: ");
input = getchar();
printf("你输入的字符是 %c\n", input);
return 0;
}
```
在这个例子中,用户通过键盘输入一个字符,然后程序会打印出这个字符的ASCII码。
`putchar` 则用于将一个整数转换为其对应的字符并输出到标准输出流 (通常是屏幕),比如:
```c
#include <stdio.h>
int main() {
int asciiCode = 'A'; // 想输出大写字母 A 的 ASCII 码
putchar(asciiCode);
return 0;
}
```
这段代码会直接在屏幕上显示字符 'A'。
相关问题
如何利用 `getchar` 和 `putchar` 构建一个多级菜单驱动的应用?
### 使用 `getchar` 和 `putchar` 构建多级菜单驱动应用
#### 1. **核心概念**
构建一个多级菜单驱动的应用程序通常涉及以下几个方面:
- 显示主菜单选项供用户选择。
- 根据用户的输入跳转到子菜单或执行相应的功能。
- 提供返回上级菜单或退出的功能。
这些都可以通过组合使用 `getchar` 获取用户输入以及 `putchar` 打印字符实现。下面详细介绍其实现逻辑和示例代码[^1]。
#### 2. **示例代码**
以下是利用 `getchar` 和 `putchar` 创建简单两级菜单系统的例子:
```c
#include <stdio.h>
void main_menu() {
putchar('\n');
putchar('M'); putchar('A'); putchar('I'); putchar('N'); putchar(' ');
putchar('M'); putchar('E'); putchar('N'); putchar('U'); putchar('\n');
putchar('1.'); putchar(' '); putchar('S'); putchar('e'); putchar('l');
putchar('e'); putchar('c'); putchar('t'); putchar(' '); putchar('O');
putchar('p'); putchar('t'); putchar('i'); putchar('o'); putchar('n');
putchar(' '); putchar('1'); putchar('\n');
putchar('2.'); putchar(' '); putchar('G'); putchar('o'); putchar(' ');
putchar('T'); putchar('o'); putchar(' '); putchar('S'); putchar('u');
putchar('b'); putchar('-'); putchar('m'); putchar('e'); putchar('n');
putchar('u'); putchar('\n');
putchar('3.'); putchar(' '); putchar('Q'); putchar('u'); putchar('i');
putchar('t'); putchar('\n');
}
void sub_menu() {
putchar('\n');
putchar('S'); putchar('U'); putchar('B'); putchar('-'); putchar('M');
putchar('E'); putchar('N'); putchar('U'); putchar('\n');
putchar('a.'); putchar(' '); putchar('D'); putchar('o'); putchar(' ');
putchar('S'); putchar('m'); putchar('e'); putchar('t'); putchar('h');
putchar('i'); putchar('n'); putchar('g'); putchar('\n');
putchar('b.'); putchar(' '); putchar('R'); putchar('e'); putchar('t');
putchar('u'); putchar('r'); putchar('n'); putchar(' '); putchar('T');
putchar('o'); putchar(' '); putchar('P'); putchar('r'); putchar('e');
putchar('v'); putchar('i'); putchar('o'); putchar('u'); putchar('s');
putchar(' '); putchar('M'); putchar('e'); putchar('n'); putchar('u');
putchar('\n');
}
int main(){
char choice, submenu_choice;
do {
main_menu();
choice = getchar();
while(getchar() != '\n'); // Clear input buffer
if(choice == '1'){
putchar('\n');
putchar('Y'); putchar('o'); putchar('u'); putchar(' ');
putchar('H'); putchar('a'); putchar('v'); putchar('e');
putchar(' '); putchar('S'); putchar('e'); putchar('l');
putchar('e'); putchar('c'); putchar('t'); putchar('e');
putchar('d'); putchar(' '); putchar('O'); putchar('p');
putchar('t'); putchar('i'); putchar('o'); putchar('n');
putchar(' '); putchar('1'); putchar('.'); putchar('\n');
}else if (choice == '2') {
do{
sub_menu();
submenu_choice = getchar();
while(getchar() != '\n'); // Clear input buffer
if(submenu_choice == 'a'){
putchar('\n');
putchar('Y'); putchar('o'); putchar('u'); putchar(' ');
putchar('H'); putchar('a'); putchar('v'); putchar('e');
putchar(' '); putchar('S'); putchar('e'); putchar('l');
putchar('e'); putchar('c'); putchar('t'); putchar('e');
putchar('d'); putchar(' '); putchar('O'); putchar('p');
putchar('t'); putchar('i'); putchar('o'); putchar('n');
putchar(' '); putchar('a'); putchar('.'); putchar('\n');
} else if (submenu_choice == 'b') {
break;
}
}while(1);
} else if (choice == '3') {
putchar('\n');
putchar('G'); putchar('o'); putchar('o'); putchar('d');
putchar(' '); putchar('B'); putchar('y'); putchar('e');
putchar('!'); putchar('\n');
return 0;
}
} while(1);
}
```
#### 3. **代码说明**
- **Main Menu Function (`main_menu`)**
这个函数负责打印主菜单界面,其中包含了三个主要的选择项:Option 1、Go To Sub-menu 和 Quit。每个选项都被单独一行显示出来,并且每行由一系列的 `putchar` 函数调用组成以形成完整的文字信息。
- **Sub Menu Function (`sub_menu`)**
当选择了进入子菜单时,此函数被调用来展示更详细的选项列表。在这里我们只提供了两个可能的动作:“Do Something” 和 “Return To Previous Menu”。同样地,也是借助多次调用 `putchar` 来构成整个输出内容。
- **Input Handling In Main Loop**
主循环不断请求用户做出新的选择直至他们决定离开为止。每次迭代都会先调用 `main_menu()` 展示可用选项,接着等待接收来自键盘的一条命令(`getchar`). 输入缓冲区清理确保只有期望的数据参与后续处理步骤.
- **Handling Submenus Within The Program Flow**
对应于第二层导航结构的部分实现了嵌套循环机制。一旦检测到切换到了某个特定区域(比如我们的案例里是第二个项目),就启动另一个持续监听事件的小范围控制单元。在此期间任何不符合预期的行为都将受到严格约束直到满足跳出条件才恢复至上一层级运作状态之中去[^1].
---
get getchar
### C语言 `getchar` 函数使用说明
#### 函数定义与头文件引入
为了使用 `getchar()` 函数,程序需要包含标准输入输出库 `<stdio.h>`。此函数用于从标准输入流(通常是键盘)读取单个字符。
```c
#include <stdio.h>
```
#### 返回值类型
`getchar()` 的返回值是一个整数类型的表达式,表示所读取到的字符编码或者是文件结束标志EOF[^1]。
#### 基本用法实例
下面展示了一种简单的应用方式,在这里每次调用 `getchar()` 后立即将其结果赋给变量并打印出来:
```c
int main() {
char ch = getchar(); // 输入字符
putchar(ch);
return 0;
}
```
另一种常见的做法是以循环的形式不断接收直到遇到特定条件为止,比如到达文件结尾或接收到指定字符时停止:
```c
int main() {
int ch = 0;
while ((ch = (getchar())) != EOF) {
putchar(ch);
}
return 0;
}
```
#### 处理缓冲区残留问题
当与其他可能遗留未处理数据于缓冲区中的函数一起工作时——例如 `scanf()` ——需要注意清除这些多余的数据项以免影响后续操作的结果准确性。一种解决方案如下所示:
```c
char c_tmp;
while ((c_tmp = getchar()) != '\n' && c_tmp != EOF);
// 清除剩余至换行符前的所有内容
```
值得注意的是,并不是所有的编译环境都支持直接利用 `fflush(stdin)` 来清理标准输入缓冲区;因此上述替代方案更为通用可靠[^3]。
阅读全文
相关推荐
















