scanf(格式控制字符串,参数地址表)

孤街浪徒 提交于 2020-02-21 11:16:44
#include <stdio.h>
#include <stdlib.h>

int main()
{   //scanf(格式控制字符串,参数地址表);
    int a,b;
    //Ane request:空格符 is space character
    scanf("%d %d",&a,&b);
    printf("a=%d,b=%d",&a,&b);
    //Two request:逗号 is space character input:3 4 out put a=3,b=39
    scanf("%d,%d",&a,&b);
    printf("a=%d,b=%d",&a,&b);
    //Three request:input date 字符串"a="和"b="原样输入,即input a=12,b=34
    scanf("a=%d,b=%d",&a,&b);
    printf("a=%d,b=%d",&a,&b);
    //Four demand  input date限定以下格式1234 同时输出结果a=12,b=34
    scanf("%2d%2d",&a,&b);
    printf("a=%d,b=%d",a,b);
    //Five require 输入数据限定格式12\n34,同时要求程序输入结果为a="12",b="34",该如何
    scanf("%2d%2d",&a,&b);
    printf("a=\"%d\",b=\"%d\"\n",a,b);
    //Six claim 若用户可用任意字符作为分隔符输入数据,
    //*为抑制字符称忽略输入修饰符使得对应的输入项在读入后不赋给任何变量,
    //%c表示以字符型格式输入,%*c表示读入用户键盘键入的字符,但是不赋值给任何变量
    scanf("%d%*c%d",&a,&b);
    printf("a=%d,b=%d\n",a,b);
    //Seven require 用户输入123456
    //%*2d 中*为忽略修饰符,表示对应输入项34在读入后不赋值给任何变量
    //%2d中2位域宽附加格式说明,表示从输入数据中按指定宽度2从输入缓冲区截取输入数据
    scanf("%2d%*2d%2d",&a,&b);
    printf("a=%d,b=%d",a,b);
    //Eight claim 用户输入非法字符12 3a output a=12,b=3
    scanf("%d%d",&a,&b);
    printf("a=%d,b=%d",a,b);
    //Nine: request input:123a output:a=123,b=39
    //explain:函数scanf()未能读入指定的数据项数,怎么判断?通过scanf的返回值EOF 需了解if-else
    scanf("%d%d",&a,&b);
    printf("a=%d,b=%d",a,b);
    //Ten:demand scanf函数未加取地址运算符&
    //编译器误将a值与b值当做地址值,使得数据视图存入这两个地址单元,从而造成非法访问
    //而真正的地址&a,&b内存单元并未被存入数据,即变量a,b未被赋值。
    scanf("%d%d",a,b);
    printf("a=%d,b=%d",a,b);
    //NOTIC:如果函数scanf()的格式控制字符串中存在除格式说明符以外其他字符,
    //那么这些字符必须在输入数据时,由键盘原样输入。
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!