黑马程序员-IOS基础---scanf函数用法及注意事项

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------scanf函数的用法及注意事项

1.定义:scanf是标准的格式化输入函数,它从标准输入设备(一般是键盘)中读取输入数据。

2.使用格式:scanf("格式说明符",输入项的地址列表)。

3.注意事项: 

(1)输入分隔符问题:如果输入数据全部为整数则可以用空格、制表符或者换行符来作为分隔符,不能用,;作为分隔符。如下例程序:

#include<stdio.h>

int main()
{
int a,b,c;

printf("请输入字符:\n");

scanf("%d%d%d",&a,&b,&c);

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

        return 0;

}

运行上面程序,如果输入1 2 3系统会打印输出a=1,b=2,c=3; 如果输入1,2,3,系统会打印输出a=1,b=-1,c=-1.

分析:出现这种情况时因为逗号被当做一个字符存入了输入缓冲区内,当函数从输入缓冲区读取数据时会读取它,而它的数据类型与格式说明符中不同,产生出错,所以打印输出-1;而空格、制表符、换行符虽然也存入了输入缓冲区,但它作为当前数据输入完毕的标志,函数会自动识别这个标志从而接下来读取下一数据。

(2)混合输入问题:当函数中既有整型数据又有字符型数据时,分隔符不能再使用空格或制表符。如下例程序:

#include<stdio.h>

int main()
{
int a,b,c;

        char ch;

printf("请输入字符:\n");

scanf("%d%c%d",&a,&ch,&b);

printf("a=%d,ch=%c,c=%d\n",a,ch,b);

        return 0;

}

运行上面程序,当用键盘输入10 d 20后打印输出10, ,-1。

分析:由于空格也属于字符,当键盘输入空格后,空格被存入输入缓冲区,因此函数读取的数据依次是10,空格,d,空格,20,此时10赋值给a、空格赋值给ch、d赋值给b,所以最后打印输出的结果是10, ,-1。如果真想在输入的时候把空格作为分隔符,则可以把格式说明符改为%d %c %d,注意此时三个格式说明符中间都有空格,这样你键盘输入的空格就会被原样吸取掉。

(3)格式说明符末尾慎用\n。看下例程序:

#include<stdio.h>

int main()
{
int a,b,c;

printf("请输入字符:\n");

scanf("%d%d\n",&a,&b);

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

        return 0;

}

运行上面程序,当键盘输入1,2然后回车,我们会发现没有打印输出。

分析:由于格式说明符的末尾添加了\n导致键盘输入回车(\n)时,回车符被函数吸收掉,所以无法进行打印输出。如果想要解决这个问题,我们可以再输入结束时按原样输入一个\n符号,然后再回车,此时程序会正常运行。这个小问题有时候大家不会去注意,从而导致出现错误。如果注意到这个知识点,该类问题会被避免。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值