scanf的格式字符串不能以\n,\t,空格等空白字符结尾

之前在写代码的过程中发现如果scanf中的格式字符串以\n结尾,那么输入完后,会不能中止程序,一直按回车也没用,只有再输入一个字符才能中止,同样的事情也发生在以\t和空格结尾。

#include<stdio.h>
int main()
{
    scanf("%d\n");
}
#include<stdio.h>
int main()
{
    scanf("%d\t");
}
#include<stdio.h>
int main()
{
    scanf("%d ");
}

翻阅书本后会发现,原来是scanf的特性决定的,scanf()函数每次读取一个字符,会跳过所有的空白字符,直到遇到第一个非空白字符才开始读取(注意:如果要读取整数,scanf会希望发现一个数字或+/-号

引用书上的内容

处理格式串中的普通字符时,scanf函数采取的动作依赖于这个字符是否为空白字符。

空白字符。当在格式串中遇到一个或多个连续的空白字符时,scanf函数从输入中重复读空白字符直到遇到一个非空白字符(把该字符“放回原处”)为止。格式串中的一个空白字符可以与输入中任意数量的空白字符相匹配,包括0个(因此scanf("%d%d")和scanf("%d %d")是一样的)

其它字符。当在格式串中遇到非空白字符时,scanf函数将把它与下一个输入字符进行比较。如果两个字符相匹配,那么scanf函数会放弃输入字符而继续处理格式串。如果两个字符不匹配,那么scanf函数会把不匹配的字符放回输入中,然后异常退出。

所以在格式串末尾有了空白字符后,scanf就会一直读取空白字符,一直按回车和空格就不能中止程序,只有输入一个非空白字符后,才会中止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值