用宏定义清缓存区吃垃圾字符的代码
时间: 2023-07-02 12:06:18 浏览: 159
以下是用宏定义清空缓存区的代码:
```c
#define CLEAR_BUF \
do {\
int ch;\
while ((ch = getchar()) != '\n' && ch != EOF);\
} while (0)
```
该宏定义会将缓存区中的所有字符读取并丢弃,直到遇到换行符 `\n` 或文件结束符 `EOF`。使用时,只需要在需要清空缓存区的地方调用该宏即可。
例如:
```c
printf("请输入一个整数:");
scanf("%d", &num);
CLEAR_BUF; // 清空缓存区
printf("请输入一个字符:");
scanf("%c", &ch);
```
在上述代码中,如果用户在输入完整数后直接按下回车键,则回车键会留在缓存区中,导致第二个 `scanf` 函数读取到的是一个无效的字符。因此需要在第一个 `scanf` 函数后清空缓存区,以确保第二个 `scanf` 函数能够正常读取用户输入的字符。
阅读全文