C语言基础-间隔读取输入数据

序言

在笔试编程题中,有时候并不会给定程序输入,数据读取都得自己写。

数据间隔输入读取方式如下:


1. scanf函数

  • 函数原型:int scanf ( char * format [ ,argument, … ]);

    • 成功返回:接收到的值的个数。如scanf(“%d%d”, &a, &b)都成功返回2
    • 失败返回:EOF(文件结束符),错误类型可以通过不同方式检测
  • 空白字符

    • 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是空格、跳格、换行等,直到第一个非空白符出现为止
  • 非空白符

    • 非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符,即有效字符读入时即删除
  • scanf的合法输入方式

    3□□4□□□□5

    3(换行)4□5

    3(tab)4(换行)5

    3,4,5

    3,□4,□5

    3,□□□4,□5

    ,紧跟数字

    scanf(“a=%d,b=%d”,&a,&b); 对应输入:a=3,b=4

    a=与“a=”对应; ,与”,”对应

  • scanf字符读入

    • 此时的空格、跳格、换行符、回车符等都是有效字符,需特别注意
  • scanf字符串读入

    • scanf(“%s”, str)读入字符串“this is a string”,其中的空格也是有效字符(gets函数可以接收空格/制表符/回车等)
    • 可通过格式控制符%[]来读入有效字符或通过%c判断是否为空格来跳过


2. getchar函数

  • 函数原型:int getchar(void)

    • 该函数没有参数
    • getchar并非真正函数,而是getc(stdin)的宏定义
  • 函数返回值

    • 成功:返回读取字符的ASCII码
    • 失败:返回-1并将字符回显屏幕
  • 注意点:函数类型是int,虽然是读取字符但是定义时最好使用int类型而不是char类型

    • 一方面是防止数据发生截断,即char能存储的数比较小
    • 另一方面是当读取错误返回结束符EOF时(#define EOF -1),又需要升级getchar()字符类型为int,可能导致错误
  • 补充

    • ’\n’:换行符,newline
    • ‘\r’:回车符,return
    • ‘\t’:跳格符/制表符,table
    • ‘\0’:字符串结束符


3. 间隔读取输入数据

  • 程序
#include 
#include 

int main()
{
    int arr[10] = {0};
    int i = 0;

    //循环读入以空格间隔的多组整型数
    while (scanf("%d",&arr[i]) != EOF && getchar() != '\n')
    i++;

    for(int j = 0; j < 10; j++)
        printf("%d%c", arr[i], j == 10 - 1 ? '\n' : ' ');
    return 0;
}



http://c.biancheng.net/cpp/html/2521.html
http://c.biancheng.net/cpp/html/259.html

2017.08.27

你可能感兴趣的:(C/C++)