信息学竞赛中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\n", 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()) != '\n') 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 函数的子一个参数为字符数组,第二个参数为最多接收的字符数。

posted @ 2021-01-30 11:25  quanjun  阅读(538)  评论(0编辑  收藏  举报