用scanf()输入单个字符时的注意点

 以下是一段程序:

#include <stdio.h>
int  main()
{
 int i=1,flag=1;
 char c;
 while(flag)
 {
  printf("%d\n",i);
  printf("continue?[Y/N]");
  scanf("%c",&c);

  if(c=='n' || c='N')
   flag=0;
  i++;
 }
 return 0;
}

当输入Y(事实上其他非N或n字符也可以)时。输出i的下一个i的值
但运行后的结果却是这样的:

问题出在scanf("%c",c)语句上,这里我们应该改成scanf("  %c",c) ,再%c前加上一个空格

若不加空格则在输入时将按照以下情况给c 赋值:

输入Y, c='Y',flag=0,,i=2,继续循环,输出提示,c='回车符',flag=0,i=3,继续循环,输出提示,等待给c赋值

错误在于回车符也被赋值给c

加上空格后 回车符不在赋值给c 也就避免了这种情况

 再举个例子:

#include <stdio.h>
int main()
{
 char a,c;
 scanf("%c",&a);
 scanf("%c",&c);
 printf("\n");
 printf("%c\n",a);
 printf("%c\n",c);
 return 0;
}
要输入两个字符并且输出,如果第二个%c前不加空格则不会得到正确的结果。

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值