C语言中的scanf

scanf

C语言中,scanf语句用于扫描键盘输入的数据,存储到变量的地址中。
有两种用法:

  1. scanf(“输入控制符”,输入参数);
  2. scanf(“非输入控制符 输入控制符”,输入参数);
    非输入控制符必须原样输入

输出参数由若干个地址组成,可以是变量的地址,或字符串的首地址。

使用scanf的例子

例一:

#include 
int main()
{
    int data;
    printf("请输入一个整数:/n");
    scanf("%d",&data);//注意后面这里的变量“data”前一定要加取地址符&
    printf("你输入的整数是:%d\n",data);
    return 0;
}

上面的代码编译运行后可以识别输入了一个什么数,并打印在屏幕上。

在上述代码中,如果scanf语句换成scanf("data=%d",&data);,那么在输入数据的时候就要按照双引号里面的格式先输入data=,后面接着敲要输入的数据。

例二:(输入多个数据)

#include 
int main(void)
{
    int data1,data2,data3;
    printf("请输入三个整数:\n");
    scanf("%d%d%d",&data1,&data2,&data3);
    printf("你输入的三个数是:%d,%d,%d",data1,data2,data3);
    return 0;
}

按照上述代码运行,输入数据的时候可以输入一个数据后按空格,紧接着输入下一个数据,输入完最后一个数据后直接按回车。也可以输入一个数据按一次空格。
C语言中的scanf_第1张图片

如果上述代码的scanf语句换成这样:scanf("%d,%d,%d",&data1,&data2,&data3);(在%d之间加了逗号),风险可能会很大。因为如果只输入一个数据后不小心按了回车,那程序记录一个数据就直接结束了。后面两个数据是系统默认给你的两个数。

此时,正确的输入只有这样(用空格隔开也不行了):

如果例二代码中的scanf语句换成这样:scanf("%d %d %d",&data1,&data2,&data3);(在%d之间加了空格),也会有风险,风险和上面一样。此时,正确输入有两种:
C语言中的scanf_第2张图片

对像scanf("a=%f,b=%f,c=%f",&a,&b,&c);这种格式的,编译运行程序后,输入的内容一定要按照双引号里面的内容敲:a=(要输入的值),b=(要输入的值),c=(要输入的值),才能正确输入。

因此,写scanf的时候千万不要在双引号里面乱加东西,而且建议有多少个数据就写多少个scanf语句。

使用scanf输入字符

#include 
int main(void)
{
    char data1;
    char data2;
    char data3;
    printf("请输入三个字符\n");
    scanf("%c%C%C",&data1,&data2,&data3);
    printf("你输入的三个字符是:data1=%c,data2=%c,data3=%c\n",data1,data2,data3);
    return 0;
}

上述代码可以扫描输入的字符,但是输入的时候不能用空格分割,也不能输入一个按一次回车,因为空格和回车都算是字符类型,因此只能连着输入三个字符。
C语言中的scanf_第3张图片

使用scanf混合输入

#include 
int main(void)
{
    int data1;
    float data2;
    char data3;
    printf("请按顺序输入一个整数,小数和字符:\n");
    scanf("%d%f%c",&data1,&data2,&data3);
    printf("你输入的整数,小数和字符是:整数:%d,小数:%f,字符:%c\n",data1,data2,data3);
}

上述代码编译运行后,输入整数和输入小数之间可以用空格或者回车相隔,但是输入小数和输入字符之间不能用空格和回车
C语言中的scanf_第4张图片

如果输入整数和输入小数之间也连着,电脑会认为小数是以0.xxxx开头的数字

小结

  1. 使用scanf之前最好先使用printf提示用户以什么样的方式来输入。
  2. scanf中尽量不要使用非输入控制符,尤其慎用\n
  3. 如有必要,应该编写代码对用户的非法输入做适当的处理。

你可能感兴趣的:(C,c语言)