scanf的一些小坑(个人踩过)

在我们平时的写代码过程中

平时见到的0 - 就是数字0

这种被单引号引起来的 ‘ 0 ’ - 字符0

被单引号引起来的\0:‘ \0 ’ - 转义字符,是字符串的结束标志,ASCII码值是0

EOF - 是end of file 大写字母的缩写,也是文件的结束标志,本质上是-1

NULL - 是空指针,本质上是0

关于scanf函数的一些问题:scanf函数的一般形式为: scanf("格式控制字符串", 地址表列);

  • scanf输入时需要注意

scanf的格式控制字符串当中,两个相邻的变量,录入格式化设置时中间如果是通过空格隔开的,在输入的时候就需要通过空格来把输入的两个数据隔开,如果使用的是逗号,输入时就需要通过逗号来隔开数据。而且输入时的格式以及变量的个数和顺序都要与代码当中设置的格式一一对应。


int main()
{
    int a ;
    int b;
    scanf("%d %d",&a,&b);
    printf("a = %d , b = %d \n",a,b);

    return 0;
}

正常输入:

异常输入:

当输入变量的数据时,中间是通过其他方式隔开,第二个数据就会出现上述情况,因为在读取这些数据放入相应的变量当中时,变量a将它第一个数据读取走了,第二个数据由于逗号的影响导致它读取不到后面的6,所以变量b的内容就还是它最初创建的时候所赋予的随机值。

  • 格式化的时候在后面加了一个\n的转义字符

在代码当中可以看到,格式控制字符串的末尾因为手误加了一个\n的转义字符,导致程序的逻辑产生了偏差

  • 输出的时候输出函数的输出顺序是按照输出函数的变量顺序来的

可以看到输入的数据顺序和输出的数据顺序是通过代码的逻辑来控制的

  • 放在while循环当中的连环输入

因为scanf函数的返回值,返回的是读取到的数据的个数,比如你用scanf一次性读取两个数据,他的返回值就是2,一次性读取3个数据,返回值就是3......所以可以通过这种特性来实现scanf的连续读取

方式一:


int main()
{
    int a;
    while (scanf("%d",&a) == 1)
    {
    
        printf("a = %d\n",a);
    }

    return 0;
}

方式二:


int main()
{
    int a;
    while(scanf("%d",&a)!=EOF)
    {

        printf("a = %d\n", a);
    }

    return 0;
}

既然能够连续读取了,那么如果读取完毕该怎么停止呢?

我们可以通过输如ctrl+z(也就是让scanf读取失败,scanf函数读取失败的时候返回EOF)来实现,由于我使用的是vs2019发现这个编译器当中是需要输入三次才能够让程序结束,不同编译器的实现原理不同。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我可是万西西呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值