精华内容
下载资源
问答
  • C语言中scanf与分隔符(空格回车Tab)

    千次阅读 2019-01-22 14:06:02
    scanf通常返回的是成功赋值(从标准输入设备赋值到参数列表所指定的内存区域)的数据项数,如果出错或是遇到end of file(注意,如果想从键盘输入EOF,在windows的DOS窗口用Ctrl+Z 或F6;在UNIX系统上,用CTRL+D。),...

    1、scanf的返回值

    scanf通常返回的是成功赋值(从标准输入设备赋值到参数列表所指定的内存区域)的数据项数,如果出错或是遇到end of file(注意,如果想从键盘输入EOF,在windows的DOS窗口用Ctrl+Z 或F6;在UNIX系统上,用CTRL+D。),则返回EOF,比如:

    scanf("%d%d", &x, &y);

    如果x和y都被成功读入,那么scanf的返回值就是2;

    如果只有x被成功读入,返回值为1;

    如果x和y都未被成功读入,返回值为0;

    如果遇到错误或遇到end of file,返回值为EOF。

    2、scanf的处理机制

    scanf以删除的方式从缓冲区读入数据(来自标准输入设备的数据存储在缓冲区),也就是说,scanf从缓冲区读入一个数据项,该数据项在缓冲区中就被清除掉了。而如果scanf需要读取一个数据项,返现缓冲区当前是空的,那么程序就会在scanf代码处阻塞,等待用户输入,scanf函数接收到相应的数据项之后,在缓冲区中将这一数据项清除,scanf函数返回,程序继续执行。

    3、scanf对不同类型输入的处理方式

    首先,要清除一个概念:空白字符(white space)。一般,程序中所指的空白字符是指空格(space),回车(enter)和指标符(table)。

    3.1 整数%d

    对于整型数据的输入,也就是说"%d"类型的输入,scanf默认的分割符是所有的空白字符(空格,回车和指标符都行)。也就是说如果一个scanf函数中出现scanf("%d%d",&a,&b),那么用任何一个空白字符来分隔两个整数a,b的值,变量a,b都可以接收到正确的输入。另外,要注意的是,scanf对于数字输入,会忽略输入数据项前面的空白字符.

    3.2 字符串%s

    scanf对于字符串输入的处理和对整数类似,会忽略前导的空白字符,而且默认的分隔符是所有的空白字符。但是,要注意的是,由于C语言中,没有string类型,都是用char型数组来表示。因此,scanf会为每一个输入的字符串最后加一个‘\0’。下面是一个例子,可以看出scanf这货的边界控制还是要小心。

    3.3 字符%c

    scanf在处理对字符数据的输入时,既不会忽略前导空白字符,默认也没有任何分隔字符。所有的字符,包括空白字符都会被当成输入字符。

    由于缓冲区中有回车空格等数据,会导致输入数据比较诡异,为了解决这个问题,有以下方法:

    (1) 清空缓冲区

    在微软系统中,有一个名为fflush(stdin)的函数,可以用来清空缓冲区,在freopen中fflush不要用

    #include<stdio.h>  
    int main()  
    {  
        char a ,b ;  
        printf("Input the value of a and b:");  
        while(scanf("%c%c",&a,&b)!=EOF)  
        {  
            printf("a=%c,b=%c\n",a,b);  
            fflush(stdin);  
            printf("Input the value of a and b:");  
        }  
        return 0;  
    }  
    

    (2)将缓冲区的数据读出来

    有的编译系统并没有定义stdin的fflush操作,这个时候,可以把缓冲区中的数据读出来,有如下几种可行的方法:

    1)getchar()

    将例4中的fflush(stdin);语句换成

    char c;

    while((c=getchar())!=’\n’&&c!=EOF);

    运行效果和上面的相同。

    #include<stdio.h>  
    int main()  
    {  
        char a ,b ;  
        printf("Input the value of a and b:");  
        while(scanf("%c%c",&a,&b)!=EOF)  
        {  
            printf("a=%c,b=%c\n",a,b);  
    	char c;
    	while((c=getchar())!='\n'&&c!=EOF);
            printf("Input the value of a and b:");  
        }  
        return 0;  
    }  
    

    2)gets()

    char* gets(char* buffer)从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。

    要注意的是gets函数可以无限读取,不会判断上限,所以应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。

    展开全文
  • 参数:format格式控制,argument可选参数 返回值:返回成功复制的数据项数,出错时返回EOF(-1) 1)循环输入时可以为 while(scanf("%d", &key) != EOF) while(scanf("%d", &key) !...

    输入函数(#include <stdio.h>)

    1.scanf

    iint scanf(char *format[,argument,...])

    参数:format格式控制符,argument可选参数

    返回值:返回成功复制的数据项数,出错时返回EOF(-1)

    格式控制符 含义(%o、%x、%X有符号)
    %c 把输入解释成一个字符
    %d、%i 把输入解释成一个有符号十进制整数
    %e、%f、%g、%a 把输入解释成一个浮点数(%a是C99的标准)
    %E、%F、%G、%A 把输入解释成一个浮点数(%A是C99的标准)
    %o 把输入解释成一个有符号八进制整数
    %p 把输入解释成一个指针(一个地址)
    %s 把输入解释成一个字符串:输入的内容以第一个非空白字符作为开始,并且包含直到下一个空白字符的全部字符
    %u 把输入解释成一个无符号十进制整数
    %x、%X 把输入解释成一个有符号十六进制整数

    1)循环输入时可以为

    while(scanf("%d", &key) != EOF)

    while(scanf("%d", &key) != -1)

    while(~scanf("%d", &key))//-1的补码为10000000 00000000 00000000 000000001,补码为11111111 11111111 11111111 11111111,~(按位取反)后为0,故出错时while的判断条件为0,即退出循环

    注意:while(scanf("%d", &key))不可取,因为C语言中将 非0 值均作为true,0作为false

    2)scanf仅读取对应格式的数据,不会自动读入并丢弃分隔符,所以想在scanf之后读入一个char值,应该先getchar()或scanf("%c",&ch)将\n读入但不使用

    例如

    char ch,a[10],b[10];
    scanf("%s",a);
    scanf("%s",b);
    printf("%s",a);
    printf("%s",b);
    

    输入:hello 回车 world 回车

    输出:helloworld

    第一个读入hello后\n还留在缓冲区,第二个读取\n不符合%s的格式,丢弃后读入world,故下面两种方式和上面的运行结果一致

    char ch,a[10],b[10];
    scanf("%s",a);
    getchar();
    scanf("%s",b);
    printf("%s",a);
    printf("%s",b);
    char ch,a[10],b[10];
    scanf("%s",a);
    scanf("%c",&ch);
    scanf("%s",b);
    printf("%s",a);
    printf("%s",b);

    2.gets

    char* gets(char* buffer)

    参数:指向一维char地址空间的指针

    返回值:即输入的参数(指向一维char地址空间的指针)

    1)  gets从标准输入设备读字符串,可以无限读取,不会判断上限(应该确保buffer的空间足够大,以便在执行读操作时不发生溢出),以回车结束读取。

    gets读取以换行符结束,自动读入并丢弃换行符。

    例如:

    char ch,a[10],b[10];
    gets(a);
    gets(b);
    printf("%s",a);
    printf("%s",b);

    输入:hello 回车 world 回车

    输出:helloworld

    char ch,a[10],b[10];
    gets(a);
    getchar();
    gets(b);
    printf("%s",a);
    printf("%s",b);

    输入:hello 回车 world 回车

    输出:helloorld

    2)返回值和参数buffer指向的是同一片地址

    char *p,a[10];
    p = gets(a);
    printf("%s\n%s\n",a,p);
    *p='$';
    printf("%s\n%s\n",a,p);

    输入:111回车

    输入:

    111
    111
    $11
    $11

     

    即p和a指向的是同一片地址

    3.getchar

    int getchar(void)

    返回值:以无符号char强制转换为int的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回EOF。


    输出函数(#include <stdio.h>)

    1.printf

    int printf( const char* format , [argument] ... )

    参数:format格式控制符,argument可选参数

    返回值:若成功则返回输出的字符数,输出出错则返回负值

    格式控制符 含义(%o、%x、%X无符号)
    %a 浮点数、十六进制数和p-计数法(C99)
    %A 浮点数、十六进制数和p-计数法(C99)
    %c 一个字符
    %d、%i 有符号十进制整数
    %e 浮点数、e-计数法
    %E 浮点数、E-计数法
    %f 浮点数、十进制计数法
    %g 根据数值不同自动选择%f或%e。%e格式在指数小于-4或者大于等于精度时使用
    %G 根据数值不同自动选择%f或%E。%E格式在指数小于-4或者大于等于精度时使用
    %o 无符号八进制整数
    %p 指针
    %s 字符串
    %u 无符号十进制整数
    %x 使用十六进制数字0f的无符号十六进制整数
    %X 使用十六进制数字0F的无符号十六进制整数
    %% 打印一个百分号

    printf带有行缓冲,其行缓冲刷新条件(将行缓冲中的内容输出到屏幕):

    缓冲区填满;

    遇到字符‘\n’(换行)或 '\r'(回车);

    调用fflush手动刷新缓冲区;

    调用scanf等函数输入数据前;

    2.puts

    int puts(const char *string)

    参数:指向一维char地址空间的指针

    返回值:成功返回非负值,失败返回EOF

    输出自带换行\n

    3.putchar

    int putchar(int char)

    参数:要被写入的字符

    返回值:以无符号char强制转换为int的形式返回写入的字符,如果发生错误则返回EOF。

     

    展开全文
  • C语言 数据输入操作

    2019-02-04 11:18:28
    1.如果相邻2个格式指示符之间,不指定数据分隔符(如逗号、冒号等),则相应的2个输入数据之间,至少用一个空格分开,或者用Tab键分开,或者输入1个数据后,按回车,然后再输入下1个数据。 记住:这个原理非常重要...

    1.如果相邻2个格式指示符之间,不指定数据分隔符(如逗号、冒号等),则相应的2个输入数据之间,至少用一个空格分开,或者用Tab键分开,或者输入1个数据后,按回车,然后再输入下1个数据。

    记住:这个原理非常重要,要会应用。否则调试结果一定会报错,我说的。哈哈。
    例如,scanf("%d%d",&num1,&num2);
    假设给num1输入12,给num2输入36,则正确的输入操作为:12 36↙
    或者:12↙
    36↙
    注:使用"↙"符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作结束。

    2.“格式字符串"中出现的普通字符(包括转义字符形式的字符),务必原样输入
    例如,scanf(”%d,%d",&num1,&num2);
    假设给num1输入12,给num2输入36,正确的输入操作为:12,36↙
    另外,scanf()函数中、格式字符串内的转义字符(如\n),系统并不把它当转义字符来解释,从而产生一个控制操作,而是将其视为普通字符,所以也要原样输入。
    记住:这个原理也重要。
    例如:scanf(“num1=%d,num2=%d\n”,&num1,&num2);
    假设给num1输入12,给num2输入36,正确的输入操作为:
    num1=12,num2=36\n↙
    提高人机交互性建议:为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用printf()函数输出一个提示信息,再用scanf()函数进行数据输入。
    例如,将scanf(“num1=%d,num2=%d\n”,&num1,&num2
    );改为:
    printf(“num1=”); scanf("%d",&num1);
    printf(“num2=”); scanf("%d",&num2);

    3.输入数据时,遇到以下情况,系统认为该数据结束:
    (1)遇到空格,或者回车键,或者Tab键。
    (2)遇到输入域宽度结束。例如"%3d",只取3列。
    (3)遇到非法输入。例如,在输入数值数据时,遇到字母等非数值符号(数值符号仅由数字字符0-9、小数点和正负号构成)。
    记住:这个很重要。

    4.使用格式说明符"%c"输入单个字符时,空格和转 义字符均作为有效字符被输入。
    记住:这个很重要。
    例如,scanf("%c%c%c",&ch1,&ch2,&ch3);
    printf(“ch1=%c,ch2=%c,ch3=%c\n”,ch1,ch2,ch3);
    假设输入:A B C↙,则系统将字母’A’赋值给ch1,空格’ '赋值给ch2,字母’B’赋值给ch3。

    展开全文
  • 格式输入函数 输入分隔符的指定 一般以空格TAB或回车键作为分隔符 其它字符做分隔符格式串中两个格式符间字符 说明 用%c格式符时空格和转义字符作为有效字符输入 * 格式: putchar( c ) 参数: c为字符常量变量或...
  • 1. 输入输出一览以下输入输出库函数的操作主要在标准输入输出设备(键盘和屏幕)与数据缓冲区之间进行。...1、格式说明符个数与输入数据个数不相等的情况:当我们从键盘输入数据时,数据之间必须用分隔符分开(空...

    1. 输入输出一览

    以下输入输出库函数的操作主要在标准输入输出设备(键盘和屏幕)与数据缓冲区之间进行。

    1.1 printf()与scanf ()

    printf():将指定的文字/字符串输出到标准输出设备(屏幕)。

    注意宽度输出和精度输出控制

    scanf():从标准输入设备(键盘)读取数据,并将值存放在变量中。

    1、格式说明符个数与输入数据个数不相等的情况:

    当我们从键盘输入数据时,数据之间必须用分隔符分开(空格、Tab键、回车)。并且要求scanf函数中格式说明符的个数与数据列表中数据的个数相等。如:

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

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

    如果出现不相等的情况,我们应该怎么分析呢?

    其实,当我们输入数据时,只要没有按回车键,所输入的数据都还存放在缓冲区,并没有存入变量中。按【Enter】键后,scanf()函数才会从缓冲区中取走数据。缓冲区是一个先进先出的队列,即取走数据的时候,遵循先输入的数据先取走的原则。scanf函数的格式说明符有几个就要取几次数据,只要碰到格式说明符就必须把数据取走,至于是不是要把取走的数据存放起来,就得看数据列表中的数据个数。没取完的数据继续留在缓冲区中。

    以下是缓冲区示意图,它像一根管道,有一个入口和一个出口,数据只能从入口中存入,只能从出口中取出。

    0818b9ca8b590ca3270a3433284dd417.png

    以下是针对该图的C程序,数据输入为:10203040

    /*

    * 输入数据格式:10203040

    * 输出:a=10 b=20

    c=30

    */

    #include

    <

    stdio.h

    >

    int

    main()

    {

    int

    a, b, c;

    scanf(

    "

    %d%d

    "

    ,

    &

    a,

    &

    b);

    /*

    scanf中有2个格式说明符,表明要取两次数据,取走10和20

    缓冲区中还剩下30和40

    */

    printf(

    "

    a=%d b=%d /n

    "

    , a, b);

    scanf(

    "

    %d

    "

    ,

    &

    c);

    /*

    scanf中只有1个格式说明符,表明要取1次数据,取走30

    缓冲区中还剩下40,因此,读者还可以取一次。。。。。

    */

    printf(

    "

    c=%d /n

    "

    , c);

    return

    0

    ;

    }

    2、宽度输入的情况:

    宽度输入指的是在%和格式说明符d之间加入一个整数。如:scanf("%2d", &x);

    规则:

    (1) 注意:%d与%1d是不同的

    (2) 当宽度小于数据的实际宽度时,截取指定宽度的部分作为一个数进入缓冲区,再将剩余部分作为另一个数放入缓冲区。

    基于以下程序进行测试,测试结果如下:

    #include

    <

    stdio.h

    >

    main()

    {

    int

    a;

    float

    b,c;

    scanf(

    "

    %3d%f%f

    "

    ,

    &

    a,

    &

    b,

    &

    c);

    printf(

    "

    %d %f %f /n

    "

    , a, b, c);

    }

    test case #1:

    输入:123

    输出:1 2.000000 3.000000

    test case #2:

    输入:12345.1234567

    输出:123 4.000000 5.123456

    test case #3:

    输入:123456

    输出:123 4.000000 5.000000

    test case #4:

    输入:1.2345

    输出:1 0.230000 4.000000

    test case #5:

    输入:123.4567

    输出:123 0.450000 6.000000

    test case #6:

    输入:1234.567

    输出:123 4.500000 6.000000

    1.2 getchar()与putchar()

    getchar(): 将用户输入的字符输出到标准输出设备(屏幕)。按【Enter】键后,getchar()函数才会读入第一个字符,并返回该字符常量。

    注:由于缓冲区的读取特性,当用户由键盘键入字符时,计算机并不会马上处理,而会暂存到系统的缓冲区(Buffter)内。到按【Enter】键后,getchar()函数才会读入缓冲区的第一个字符。而其它字符继续保留在缓冲区,等待下一个读取字符/字符串的函数来读入。

    putchar():用来输出指定的单一字符。

    例1. 运行以下程序,输入:Hello!

    #include

    <

    stdio.h

    >

    int

    main()

    {

    char

    c, s[

    20

    ];

    printf(

    "

    Enter a string:

    "

    );

    c

    =

    getchar();

    printf(

    "

    Read the remaining from the buffer

    0818b9ca8b590ca3270a3433284dd417.png/n

    ");

    scanf("

    %s", s);

    putchar(c);

    putchar('

    /n');

    printf(

    "

    %s /n

    "

    , s);

    }

    例2. 输入一个汉字,并将它显示在屏幕上。

    先输入:B超,观察输出。再运行程序,输入:超,比较输出结果:

    #include

    <

    stdio.h

    >

    int

    main()

    {

    char

    c1, c2;

    printf(

    "

    Enter an Chinese character:

    "

    );

    c1

    =

    getchar();

    c2

    =

    getchar();

    printf(

    "

    The Chinese character entered is:

    "

    );

    putchar(c1);

    putchar(c2);

    putchar(

    '

    /n

    '

    );

    }

    注:由对比可知,当输入第一个数据时,只输出了字母“B”,汉字“超”没有输出。原因是一个汉字需要两个字节(字符)才能表示,所以对于第一个输入而言,所输入的字符“超”的第二个字节内容仍然保留在缓冲区。第二次运行,只输入“超”字时,通过两个getchar()函数将缓冲区中的“超”字全部读出,并用两次putchar()显示了一个完整的汉字。

    1.3 getche()与getch()

    getche():该函数会由键盘输入一个字符,返回给调用者,并在屏幕上显示读入的字符。由于它并不读取缓冲区的字符,只要用户输入字符,getche()函数会立刻读取,而不需等待按【Enter】键。通常用于程序中只需用户输入一个字符,即可往下继续执行的情形。

    getch():它与getche()的区别是,getch()不需将所输入的字符显示到屏幕上。

    例3. 测试getche()和getch()

    #include

    <

    stdio.h

    >

    #include

    <

    conio.h

    >

    /*

    getche(), getch()

    */

    int

    main()

    {

    char

    c1, c2;

    printf(

    "

    Press any key to exit

    0818b9ca8b590ca3270a3433284dd417.png

    "

    );

    c1

    =

    getche();

    putchar(

    '

    /n

    '

    );

    printf(

    "

    Press any key once more to exit

    0818b9ca8b590ca3270a3433284dd417.png

    "

    );

    c2

    =

    getch();

    putchar(

    '

    /n

    '

    );

    printf(

    "

    The character getche() read: %c /n

    "

    , c1);

    printf(

    "

    The character getch() read: %c /n

    "

    , c2);

    }

    1.4 gets()与puts()

    gets():

    scanf输入字符串可以配合%s格式,但缺点是当遇到字符串中有空白或tab字符时,会自动视为串输入结束。因此不适合输入包含空白/tab字符的字符串。这时gets()函数就可解决该问题。

    gets()函数会将用户整段字符串响应到标准输出设备(屏幕)上,当用户按下【Enter】键时,会读取缓冲区的所有字符并存放到指定字符数组中。

    比较适合应用在多字符,中文字或长字符串的读取。

    puts():用来输出字符串,输出完成后光标自动移到下一行。当输出数据时,会以'/0'字符作为该字符串的结束。

    例4. 测试gets()和puts()

    #include

    <

    stdio.h

    >

    int

    main()

    {

    char

    s[

    50

    ];

    printf(

    "

    Enter a string:

    "

    );

    gets(s);

    printf(

    "

    The string you entered:

    "

    );

    puts(s);

    }

    2. stdio.h文件

    另外还有一组输入输出函数是getc()和putc(),它们的作用也是输入和输出一个字符,先看它们在头文件stdio.h中的定义。

    以下是头文件stdio.h的部分内容,请注意注释部分:

    /*

    size_t的定义

    */

    #ifndef_SIZE_T_DEFINED

    typedef unsigned

    int

    size_t;

    #define

    _SIZE_T_DEFINED

    #endif

    #define

    EOF  (-1)

    //

    EOF的定义

    /*

    FILE结构的定义

    */

    #ifndef_FILE_DEFINED

    struct

    _iobuf {

    char

    *

    _ptr;

    int

    _cnt;

    char

    *

    _base;

    int

    _flag;

    int

    _file;

    int

    _charbuf;

    int

    _bufsiz;

    char

    *

    _tmpfname;

    };

    typedef

    struct

    _iobuf FILE;

    #define

    _FILE_DEFINED

    #endif

    #define

    FILENAME_MAX    260

    //

    最大文件名长度

    #define

    FOPEN_MAX       20

    //

    最多可打开的文件数

    /*

    NULL指针值的定义

    */

    #ifndefNULL

    #ifdef __cplusplus

    #define

    NULL    0

    #else

    #define

    NULL    ((void *)0)

    #endif

    #endif

    /*

    标准I/O设备数组_iob[]的定义

    */

    #ifndef_STDIO_DEFINED

    _CRTIMP

    extern

    FILE _iob[];

    #endif

    /*

    标准I/O设备的定义

    */

    #define

    stdin  (&_iob[0])

    #define

    stdout (&_iob[1])

    #define

    stderr (&_iob[2])

    /*

    函数原型

    */

    _CRTIMP

    int

    __cdeclscanf(

    const

    char

    *

    ,

    0818b9ca8b590ca3270a3433284dd417.png);

    _CRTIMP

    int

    __cdecl getc(FILE

    *

    );

    _CRTIMP

    int

    __cdeclgetchar(

    void

    );

    _CRTIMP

    char

    *

    __cdeclgets(

    char

    *

    );

    _CRTIMP

    int

    __cdeclprintf(

    const

    char

    *

    ,

    0818b9ca8b590ca3270a3433284dd417.png);

    _CRTIMP

    int

    __cdeclputc(

    int

    , FILE

    *

    );

    _CRTIMP

    int

    __cdeclputchar(

    int

    );

    _CRTIMP

    int

    __cdeclputs(

    const

    char

    *

    );

    /*

    宏定义

    */

    #define

    feof(_stream)     ((_stream)->_flag & _IOEOF)

    #define

    getc(_stream)     (--(_stream)->_cnt >= 0 /

    ?

    0xff

    &

    *

    (_stream)

    ->

    _ptr

    ++

    : _filbuf(_stream))

    #define

    putc(_c,_stream)  (--(_stream)->_cnt >= 0 /

    ?

    0xff

    &

    (

    *

    (_stream)

    ->

    _ptr

    ++

    =

    (

    char

    )(_c)) :  _flsbuf((_c),(_stream)))

    #define

    getchar()         getc(stdin)

    //

    调用getchar()时,实际调用的是getc(stdin)

    #define

    putchar(_c)       putc((_c),stdout)

    //

    调用putchar(_c)时,实际调用的是putc((_c), stdin)

    例5. getc()函数和putc()函数

    #include

    <

    stdio.h

    >

    void

    main()

    {

    int

    ch;

    FILE

    *

    pfin

    =

    stdin;

    //

    定义一个文件指针,并指向标准输入设备(键盘)

    FILE

    *

    pfout

    =

    stdout;

    //

    定义一个文件指针,并指向标准输出设备(屏幕)

    printf(

    "

    Enter a string:

    "

    );

    ch

    =

    getc(pfin);

    //

    使用getc()函数获取缓冲区中的第一个字符

    putc(ch, pfout);

    //

    使用putc()函数输出该字符

    putc(

    '

    /n

    '

    , pfout);

    //

    使用putc()函数输出换行字符

    }

    运行结果:

    Enter a string: Testing!TPress any key to continue

    展开全文
  • 需要注意的是,对于 %d,在缓冲区中,空格、回车、Tab 键都只是分隔符,不会被 scanf 当成数据取用。%d 遇到它们就跳过,取下一个数据。但是如果是 %c,那么空格、回车、Tab 键都会被当成数据输出给 scanf 取用!!...
  • 1格式控制字符串包括两个信息 格式说明由%开头以格式字符结束的一串字符如%d%c%f等作用是将要输出的数据转化成指定的格式输出 原样输出字符含一般字符和转义字符一般起提示分隔数据和换行等作用如例3-1中双引号内...
  • C语言输入输出缓冲区

    2012-09-21 00:03:41
    scanf这个库函数比较奇怪,而且存在一定的缺陷,所以很多人都不用了,这里还是要简单介绍一下. scanf输入字符串,整型,实型等数据判断的方式都一样,回车,空格,tab...实型等数据时这些都被当成分隔符而不会被输入到字符数
  • scanf 会跳过输入数据中的空格、制表、换行等空格,从与该字段说明项匹配的数据起始点开始读入数据并进行规定格式的转换。scanf( )函数返回成功赋值的数据项数,读到文件末尾而没有数据时返回EOF。输入多个...
  • 例如,设输入数据为 5 3 4 7 3 5 6,则输出数据为3 1 2 5 1 3 4。 【输入形式】 从标准输入读取数据。输入包含N个数字(1),之间由空格分隔,以回车作为结束 【输出形式】 计算结果输出到标准输出...
  • 目录 一、数据类型简介 二、变量定义 2.1、变量名的取名规则 ...2.2、变量定义的多种形式 ...7.1、输入时指定分隔符 7.2、清除缓冲 7.3、输入字符串 7.4、限定输入范围 7.5、限定输入范围取反 ...
  • C语言对文件的输入输出

    千次阅读 多人点赞 2018-09-03 18:31:51
    C的数据文件由一连串的字符(或字节)组成,而不考虑行的界限,两行数据间不会自动加分隔符,对文件的存取是以字符(字节)为单位的。输入输出数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制,...
  • 1、scanf()函数: int scanf(const char *format, ...); 返回值:成功匹配的个数的参数个数...同时多个数据同时输入的时候,以空格、tab、\n为分隔符。最后的\n继续保留在缓冲区。 【补充】如果scanf输入得到一...
  • 编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。 二、实验预习提示 1、 词法分析器的...
  • C语言学习

    2020-10-23 13:16:55
    屏幕输出 格式: printf(格式控制字符串,...以空格,Tab或回车作为输入数据分隔符 scanf()格式字符 %c 输入一个字符 %d 输入十进制int型数 %% 输入一个% 1.首先熟练掌握键盘输入和屏幕输出的基本格式 2.&是一
  • C语言复试整理

    2020-04-06 17:58:28
    C语言关键字与标识符 一 关键字 全部都是小写。 二. 标识符 只能由大小写字母,数字和下划线_组成 ...在输入数字的时候会跳过空格、回车及tab,并且以空白键和其他字符为分隔符停止输入输入char型变量时不会忽略...
  • C语言笔记

    2019-12-01 22:48:13
    putchar(‘a’);//输出单个字符 getchar();//输入单个字符,必需按一次回车,即:字符+回车 printf(); %md:m指定输出字段的宽度,数据小于m,左端空格补齐, ...空格,tab,回车做分隔符 使用自带的函数,s...
  •  在C语言中采用的分隔符有逗号和空格两种。逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。在关键字,标识符之间必须要有一个以上的空格符作间隔, 否则将会出现语法...
  • 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一...
  • c语言词法分析

    2012-04-13 16:33:08
    一、实验目的:编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示...
  • c语言之文件编程

    2019-12-27 22:00:58
    在c程序中,文件一般分为程序文件和数据文件。程序文件包括源程序文件(.c)、目标文件(.obj)、可执行文件(.exe)等。...c的数据文件不考虑行的界限,两行数据间不会自动加分隔符,对文件的存取是以字符(...
  • c语言常见问题

    2012-07-24 22:13:30
    1.书写标识符时,忽略了大小写字母的区别。 2.忽略了变量的类型,进行了不合法的运算。 3.将字符常量与字符串常量混淆。 ...4.忽略了“=”与“==”的区别...输入时,不能用逗号作两个数据间的分隔符, 如下面输入不合
  • C语言txt文件解析.zip

    2020-04-07 16:05:51
    该代码主要用于 C读写txt文件,包含了不同分隔符进行字符串的拆分,根据输入的行列号进行选取并拆分。给出了示例TXT数据文件,以及相关代码,经过了测试,若有不妥的地方,请见谅并欢迎指正
  • 输入a,b的值时,不能作为输入数据分隔符的是(A ) A) , B)空格 C) 回车 D)Tab键 2.设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是( B )。 A...
  • bLue 获得了一个字符串,现在他要把这个字符串按照某个分隔符来分割成若干个字符串,你能帮他实现吗? Input 输入数据有多组(数据组数不超过 100),到 EOF 结束。 每组数据输入一行,格式为 “s c”,其中 s 为一...
  • 例 #include <stdio.h> void main) { int a,b,c,d; scanf%d%d&a&b; printf%d%d\n,a,b;... } 12 34 12,34 111222 111,222 (2)输入数据的分隔 采用隐含的分隔符空格回车键Tab键 例 #include <stdio.h> void m
  • 此代码是关于我们这学期专业课的实验作业,本来按理说我不想写任意的,但是当时以为这个挺简单就跟老师说要...迷宫矩阵的数据保存在一个文本文件中,相邻数据用空白符分隔。程序执行时,迷宫数据文件标识符从键盘输入
  • %d%d%d表示按十进制整数形式输入数据输入数据时在两个数据之间以一个或多个空格间隔也可以用回车键跳格键(tab键)下面输入均为合法 123 1 23 1(按tab键)2 3 用%d%d%d格式输入数据时不能用逗号作两个数据间的分隔符如...

空空如也

空空如也

1 2 3 4 5 6
收藏数 115
精华内容 46
热门标签
关键字:

c语言输入数据分隔符

c语言 订阅