• 信息学竞赛中C语言的输入输出


    不像C++中使用 iostream 库,在C语言中,通过函数的形式进行输入和输出。C语言中最普遍的输入函数是 scanf,输出函数是 printf。
    我们通过下面两个示例程序来比较一下C++和C的输入输出的区别。

    C++输入输出示例:

    #include <iostream>
    using namespace std;
    int main()
    {
        int a, b;
        cin >> a >> b;
        cout << a + b << endl;
        return 0;
    }
    

    C输入输出示例:

    #include <stdio.h>
    int main()
    {
        int a, b;
        scanf("%d%d", &a, &b);
        printf("%d
    ", a+b);
        return 0;
    }
    

    这两个程序的功能是一样的,都是:输入 (a)(b),输出 (a+b)

    scanf(scan function,scan 是“扫描”的意思,f 是 function(“函数”)的首字母)用于输入,它的第一个参数是一个字符串,后面的参数都是要输入变量的地址。
    %d% 是 “占位符”,它表示这里要输入一个变量,d 是“十进制(decimal)” 的首字母。所以 %d 表示的是 “我这个位置要输入一个十进制整数”,即一个 int 类型的数。

    不同的数据类型对应的 % 后面跟的字符不尽相同,常用的如下:

    • int:d
    • long:ld
    • long long:lld
    • float:f
    • double:lf
    • char:c
    • 字符数组:s

    scanf的第二个参数开始就是要输入变量的地址,我们用 &a 表示变量 a 的地址,&b 表示变量 b 的地址。

    printf(print function,print 是“打印”的意思,f 是 function 的首字母),用于输入,它的的第一个参数是一个字符串,后面的参数都是要输入的变量。

    字符输入函数

    getchar() 函数从命令行读取一个字符并返回,putchar(c) 函数用于输出一个字符 c。示例如下:

    #include <stdio.h>
    int main()
    {
        char c = getchar();
        putchar(c);
        return 0;
    }
    

    这个程序输入一个字符,并输出。

    我们可以使用 getchar 函数实现输入一行,并输出一行的功能:

    #include <stdio.h>
    int main()
    {
        char c;
        while ((c = getchar()) != '
    ') putchar(c);
        return 0;
    }
    

    字符串整行输入

    对于一个字符数组 s 来说
    下面两种方式都无法读取字符串中的空格:

    cin >> s;
    

    或者

    scanf("%s", s);
    

    这两句话都是碰到空格或回车就读取中断了。

    C语言中使用 gets 函数读取一整行(包括空格),用法如下:

    #include <stdio.h>
    int main()
    {
        char s[1001];
        gets(s);
        puts(s);
        return 0;
    }
    

    这里的 puts 函数用于输出字符数组 s(输出部分仍然可以用 pintf 或者 C++的 cout)。puts 函数会多输出一个换行符。

    如果使用 iostream 库,则可以使用 cin.getline 函数,它会读取一整行字符串(包括空格),示例如下:

    #include <iostream>
    using namespace std;
    int main()
    {
        char s[1001];
        cin.getline(s, 1000);
        cout << s << endl;
        return 0;
    }
    

    其中 cin.getline 函数的子一个参数为字符数组,第二个参数为最多接收的字符数。

  • 相关阅读:
    javaweb中带标签体的自定义标签
    javaweb带父标签的自定义标签
    Filter的常见应用
    Filter内容
    JFace TableViewer性能改善 -- 使用VirtualTable
    SWT table性能改善 -- 使用VirtualTable
    java自动探测文件的字符编码
    [小技巧]Filezilla无法确定拖放操作目标,由于shell未正确安装__解决办法
    批量导出VBA工程中的Source
    开源许可证知多少
  • 原文地址:https://www.cnblogs.com/quanjun/p/14348450.html
Copyright © 2020-2023  润新知