- 入门指南
输入输出 | C /C++篇
- 2023-11-7 21:18:13 @
1 引言
在Coder上,绝大部分题目通常会预先生成好输入输出数据(也叫测试用例)。 当一份代码提交上后,Coder平台先把你的程序运行起来,然后平台将老师预设的测试用例的每组输入给到你的程序,你的程序获取输入按题目要求计算生成标准输出,接着将你的程序的输出数据和预生成好的输出进行对比。如果输出数据和预生成好的输出进行对比完全一样则返回Accept。这是大部分Online Judge判断程序的大致过程。其中对比是非常严格的,要完全一样才会返回Accept,部分OJ对比时会忽略行末空格和文末回车。 所以如果你的答案不正确,或和要求输出的格式不同(部分可能返回PE),或者有任何多余输出那么是会Wrong Answer的。比如在程序中写 printf("请输入n") 这种语句会导致Wrong Answer。
2 常见输入形式
通常每题都会给输入输出的格式要求。 下面以求A+B为例子来说明部分常见输入形式。
再次强调输入输出需严格按照指定的格式要求 再次强调输入输出需严格按照指定的格式要求 再次强调输入输出需严格按照指定的格式要求
重要的事情说三遍
2.1 读入一组数据
Input: //输入格式
一行包含两个整数a,b,以空格隔开
Output: //输出格式
一行包含一个数字,表示a+b
我们的处理方式:直接处理即可
C版本:
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", a + b);
C++版本:
int a, b;
cin>>a >>b;
cout <<a + b <<endl;
2.2 多组数据,并告诉了数据个数
先读入数据组数,再循环处理即可。 Input: 第一行包含一个整数T(T < 10),表示共有T组测试用例 接下来T行 每行两个整数a,b Output: 对于每个测试用例,在一行中打印一个整数表示a+b C版本:
int T; scanf("%d", &T);
for (int i = 0; i < n; i ++){
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", a + b);
}
C++版本:
int T; cin >>T;
for (int i = 0; i < n; i ++){
int a, b;
cin>>a >>b;
cout <<a + b <<endl;
}
2.3 多组数据,但是不知道数据个数
不断循环读入数据,直到文件尾位置。 Input: 输入包含多组测试用例,对于每组数据输入两个整数a,b Output: 对于每个测试用例,在一行中打印一个整数表示a+b C版本:
int a, b;
while (scanf("%d%d", &a, &b) != EOF){
printf("%d\n", a + b);
}
C++版本:
int a, b;
while (cin >> a >> b){
cout << a + b <<endl;
}
Ps:不熟悉scanf和cin返回值的同学可以看看百度百科
3 关于C++的输入输出说明
C++使用的cin和cout,当读入大量数据时,与C语言的scanf相比速度极慢,甚至可能会导致Time limit error。 此时可以将如下语句加在程序最开始运行的地方,来关闭流同步,使得效率大幅提升,
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
使用这条语句后,不要再混用任何C与C++方式的输入输出,比如同时使用cin,scanf。否则会导致Wrong Answer。
4 部分数据类型的C输入输出方式
下面说明几种数据类型scanf时的读入方式,C++使用 cin,cout时会自动识别类型故不再赘述。
4.1 long long
scanf使用%I64d或%lld进行读入long long。printf同理。 例如:
long long a;
scanf("%lld", &a);
ps: int的范围为-2,147,483,648 到2,147,483,647 (2^31 - 1) long long的范围为-9223372036854775808到9223372036854775807(2^63 - 1) 需要更大范围的话可以了解一下高精度
4.2 double
scanf使用%lf,例如:
double a;
scanf("%lf", &a);
printf输出时可以通过如下方式来控制小数点后数位。 %.xlf(其中x表示位数)。 例如printf(“%.3lf\n”, a)则会输出三位小数
4.3 long double
使用%Lf,其余与double相同 (L为大写)
4.4 char
使用%c,例如
char ch;
scanf(“%c”, ch);
4.5 字符串
%s,这里实际读入的是一个字符数组,所以后面得传入的是个指针,以空格和回车作为分隔。例如:
char a[100];
scanf("%s", a);
4.6 string
String是C++的STL需使用cin读入;
string s;
cin>>s;
4.7 读入一行
4.7.1 读入到字符串
使用gets方式如下:
char s[100];
gets(s);
4.7.2 读入到string
使用getline。 从标准输入流读入方式如下:
string s;
getline(cin, s);
2 条评论
-
汪琪 LV 8 @ 2024-1-7 16:37:48
main开始的地方
-
2024-1-5 9:45:13@
梦开始的地方
- 1