c语言解决从scanf()函数和getchar()函数从输入缓冲区得到\n的问题

scanf()函数和getchar()函数是从输入缓冲区得到字符数据的,所以会出现下次接受字符为\n的情况,这种情况可以用一下两个方法:

方法1:C语言里提供了函数清空缓冲区,只要在读数据之前先清空缓冲区就没问题。

这个函数是fflush(stdin)。

方法2:自己取出缓冲区里的残留数据。比如:

char ch1, ch2;

ch1 = getchar();//这个字符是我们想要的

ch2 = getchar(); //这个字符是\n

方法3:使用库函数

#include <termios.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{
char ch; //存取从键盘上读取到的数
struct termios old_term;
struct termios cur_term;
int ret ;
tcgetattr(STDIN_FILENO, &old_term);
memcpy(&cur_term, &old_term, sizeof(cur_term));
cur_term.c_lflag &= ~(ICANON);
cur_term.c_cc[VMIN] = 1;
cur_term.c_cc[VTIME] = 0;
ret = tcsetattr(STDIN_FILENO, TCSANOW, &cur_term);
if (ret < 0)
{
      printf("Can't set\n");
      return 1;
}
printf("Are you OK? [Y/n] ");
fflush(stdout);

ret = read(STDIN_FILENO, &ch, 1);
if (ret <= 0)
{
       printf("Error\n");
}
else
{
if (ch == 'y' || ch == 'Y')
{
      printf("\nYour choice is YES\n");
}
else if (ch == '\n')
{
      printf("You make no choice, default to YES\n");
}
else if (ch == 'n' || ch == 'N')
{
      printf("\nYour choice is NO\n");
}
else
{
      printf("\nInvalid choice\n");
}
}
tcsetattr(STDIN_FILENO, TCSANOW, &old_term);
return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值