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