ACM新手之八大输入输出格式

合集下载

1.ACM简介与输入输出

1.ACM简介与输入输出

– Compile Error ; 编译出错,源代码中有语法错误 编译出错, – Run Time Error; 程序运行时发生错误,多为数组访问越界 程序运行时发生错误, – Time Limit Exceeded; 超时错误程序运行时间超过运行时 间 – Wrong Answer ; 答案错误 – Presentation Error ;输出格式错误 输出格式错误 – Accepted。恭喜,通过 。恭喜,



27/70
Hdoj_1090源代码:
#include <stdio.h> int main() { int n,i,a,b; scanf("%d",&n);
for(i=0;i<n;i++) { scanf("%d %d",&a, &b); printf("%d\n",a+b); }
}
28/70
670770870比赛完后的合影970独特的赛制独特的赛制以队为单位以队为单位每队不超过三人每队不超过三人高中毕业不超过五年高中毕业不超过五年collegiatecollegiate合作合作每队仅一台计算机每队仅一台计算机可携带纸制资料可携带纸制资料在组委会的要求内在组委会的要求内不能携带任何类型的通讯工具不能携带任何类型的通讯工具总决赛会提总决赛会提供一个简单计算器供一个简单计算器
输入_第二类
• 输入一开始就会说有 个Input Block,下面接 输入一开始就会说有N个 下面接 着是N个 着是 个Input Block。 。 参见: 参见:HDOJ_1090 • /showproblem.php? pid=1090
26/70

笔试时ACM格式的输入输出总结

笔试时ACM格式的输入输出总结

笔试时ACM格式的输⼊输出总结
很多⼤⼚笔试时不是像平时Leecode那样后台写好了输⼊输出,使⽤ACM格式时需要⾃⼰编写输⼊输出。

常⽤的输⼊输出⽅法格式:
scan.next() //读取有效字符串(不论是空格还是回车都会认为是空⽩然后进⾏断点)
scan.nextInt()/scan.nextDouble()/scan.nextByte()//读取有效整型/双精度型/字节型数据类型,以空⽩作为断点
scan.hasNext() //判断是否还有有效字符串
scan.nextLine()//判断是否还有下⼀⾏,以回车视作断点
处理字符串的常⽤⽅法:
可以将读取的字符串s.split(" ")返回⼀个字符串类型数组,将字符串以空格为断点(有时候以,作为断点)将字符串分为字符串数组。

也可以使⽤next()⽅法(仅限于字符串以空格或者回车作为断点时使⽤)挨个读取字符串并将其保存到List中。

ACM输入输出

ACM输入输出


scanf("%d",&n_case);

int i;

for(i=0;i<n_case;i++)

{

int n;

scanf("%d",&n);

int sum = 0;

int num;

while(n--)

{

scanf("%d",&num);

sum += num;

}

if(i)

{
{

break;

}

digit[(int)(a*1000000)] = true;

}

return true;
•}
• #include <stdio.h> • #include <string.h>
• int main()
•{
• char num[10];

double d_num;

#ifndef ONLINE_JUDGE
•{
• int t;
• scanf("%d",&t);
• int a,b;
• while(t--)
•{

scanf("%d%d",&a,&b);

printf("%d\n",a+b);
•}
• return 0; •}
3、有多组测试数据,没有告诉你有几组,但 却告诉你读到某些特定的数据后结束

ACM新手之八大输入输出格式

ACM新手之八大输入输出格式

ACM新手之八大输入输出格式文章分类:C++编程在ACM题库中,不管是文件输出(输入)还是标准输出(输入),都有着一定的格式,下面我就以杭电1089——1096为例子,简单的介绍一下。

第一种:A+B for Input-Output Practice (I)【输入】有多组输入数据,但没有具体的告诉你有多少组,只是让你对应每组输入,应该怎样输出。

【输出】有多组输出,对应着每组输入,每组输出占一行。

【代码】对于上述常见的情况,我们可以用下面的代码来解决。

没有告诉我们有多少组,我们只需要等待即可:while (scanf (……) != EOF)相对应输入,输出只需要在while中输出。

【完整代码】第二种:A+B for Input-Output Practice (II)【输入】先输入一个整数,告诉我们接下来有多少组数据,然后在输入每组数据的具体值。

【输出】有多组输出,对应着每组输入,每组输出占一行。

【代码】这也是一种常见的输入形式,简单的代码,我们可以先用scanf函数输入第一个整数来确定有多少行,然后在用for循环一组一组的输入。

【完整代码】第三种:A+B for Input-Output Practice (III)【输入】有多组输入数据,没有具体的告诉你有多少组,但是题目却告诉你遇见什么结束。

【输出】有多组输出,没对应一组输入都有相应的输出,结束标记不用管!【代码】这种类型的题目和第一种差不多,但是有一点值得注意,就是要加上结束条件。

对于这道题我么可以这样while(scanf(“%d%d”, &a, &b) && (!(a==0 && b==0))),当然你也可以将条件写在while循环的内部,条件满足时break即可。

【完整代码】第四种:A+B for Input-Output Practice (IV)【输入】输入有多组,并却题目告诉你每组输入遇见什么结束,与第三种不同之处在于,每组输入都有相应的细化。

基本输入输出(1)讲述

基本输入输出(1)讲述

1 只有一组测试数据
1 只有一组测试数据
• #include < stdio.h > int main() { int a,b; scanf("%d %d",&a, &b); printf("%d\n",a+b); return 0; }
1 只有一组测试数据
• #include < iostream > //请注意include的使用, 如果使用#include 在G++编译器上将出现 “Compile Error” using namespace std; int main() { int a,b; cin >> a >> b; cout << a+b << endl; return 0; }
输入
• 2、有多组测试数据,直到读至输入文件结 尾为止,这时需要用到 while(scanf("%d",&n)!=EOF)或while (cin>>n)
Answer
• #include < stdio.h > int main() { int a,b; while(scanf("%d %d",&a, &b) != EOF) printf("%d\n",a+b); return 0; } • 说明:scanf函数返回值就是读出的变量个数,如: scanf( “%d %d”, &a, &b );如果只有一个整数输入,返回 值是1,如果有两个整数输入,返回值是2,如果一个都没 有,则返回值是-1。EOF是一个预定义的常量,等于-1。

国际大学生程序设计大赛(ACM-icpc)输入输出介绍

国际大学生程序设计大赛(ACM-icpc)输入输出介绍

本类输入解决方案:
C语法: scanf("%d",&n) ; for( i=0 ; i<n ; i++ ) { .... } C++语法: cin >> n; for( i=0 ; i<n ; i++ ) { .... }
2012-3-26 12
输入第三类:
输入不说明有多少个Input Block,但以某个特殊输入为结束标志。 ex-3
2012-3-26 10
ex-2源代码:
#include <stdio.h> int main() { int n,i,a,b; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d %d",&a, &b); printf("%d\n",a+b); } }
2012-3-26 11
ACM程序设计
输入输出格式
2012-3-26
1
ACM题目特点
由于ACM竞赛题目的输入数据和输出 数据一般有多组(不定),并且格式多 种多样,所以,如何处理题目的输入输 出是对大家的一项最基本的要求。这也 是困扰初学者的一大问题。 下面,分类介绍:
2012-3-26
2
一个超级简单的题目(ex-1):
5
输入第一类:
输入不说明有多少个Input Block, 以EOF为结束标志。 参见:ex-1.
2012-3-26
6
ex-1源代码:
#include <stdio.h> int main() { int a,b; while(scanf("%d %d",&a, &b) != EOF) printf("%d\n",a+b); }

ACM基本输入输出

ACM基本输入输出
int n,a,b; scanf(“%d”,&n); while (n--) {
scanf(“%d%d”,&a,&b) ; printf(“%d\n”,a+b); } return 0; }
第三类输入(HDOJ 1091)
第三类输入 (首先给出数据组数HDOJ 1091源代码)
// HDOJ 1091 A+B for Input-Output Practice (III) #include <stdio.h> int main() {
if(i>1) printf("\n"); sum=0; scanf("%d",&n); while(n--) {
scanf("%d",&a); sum+=a; } printf("%d\n",sum); }
总结一下:( 小技巧、规定)
1、main 函数返回值为int 型(正式比赛要求) 2、 scanf函数返回值就是读出的变量个数,没有读到数
int n,a,sum; while ( scanf("%d",&n), n ) {
sum=0; while ( n-- ) {
scanf("%d",&a); sum+=a; } printf("%d\n",sum); } return 0; }
HDOJ 1093
HDOJ 1093 源程序
int c,n,a,sum; scanf("%d",&c); while(c--) {
sum=0; scanf("%d",&n); while(n--) {

ACM中常用的输入输出方式

ACM中常用的输入输出方式

ACM中常⽤的输⼊输出⽅式 不论是在ACM/ICPC这样类型的⽐赛中,还是在做项⽬中,对于输⼊输出的格式尤为重要,不可以想当然的按⾃⼰那⼀套⾛,我们需要根据题⽬要求进⾏操作,对于第⼀次接触这⽅⾯⽐赛的⼩⽩,最为常见的现象便是类似于下⾯这⾏代码1 printf(“请输⼊⼀组数据:”);2 cout<<"输出的结果为"; 倘若题⽬没有要求你,千万不要有多余的输出,虽然在测试的时候⽅便⾃⼰,但也⿇烦在提交运⾏时注释掉,因为电脑可没有你的⼤脑那样灵活,他要对⽐的数据很死板,多⼀个空格少⼀个空格都不⾏,所以,在这⼀块的处理⼀定要细⼼!细⼼!再细⼼!下⾯我们来看下常见的输⼊输出格式有哪些⼀、基本输⼊输出1、单组输⼊输出已知题⽬有两个变量a和b,现在就要输⼊a和b,操作如下1 //C2 scanf("%d %d",&a,&b); printf("%d %d\n",a,b);3 //C++4 cin>>a>>b; cout<<a<<b<<endl;这个很简单,那么如果题⽬输⼊n组a和b怎么办呢2、n组输⼊输出1 //C2 scanf("%d",&n);3 while(n--) {scanf("%d %d",&a,&b); printf("%d %d\n",a,b);}4 //C++5 cin>>n;6 while(n--){cin>>a>>b;cout<<a<<b<<endl;}也没有那么难嘛,现在如果n不告诉你,要求输⼊多组a和b该如何操作呢?3、多组输⼊输出(重点来了)1 //C2 while(scanf("%d %d",&a,&b)!=EOF){printf("%d %d\n",a,b);}//第⼀种写法3 while(scanf("%d %d",&a,&b)==2){printf("%d %d\n",a,b);}//第⼆种写法4 while(~scanf("%d %d",&a,&b)){printf("%d %d\n",a,b);}//第三种写法5 //C++6 while(cin>>a>>b){cout<<a<<b<<"\n";}竞赛中经常采⽤这种输⼊输出⽅式。

教案1_2_ACM输入输出

教案1_2_ACM输入输出

• 1、只有一组测试数据; • 2、有多组测试数据,但一开始就告诉 你测试数据的数目; • 3、有多组测试数据,没有告诉你有几 组,但却告诉你读到某些特定的数据 后结束; • 4、有多组测试数据,既没有告诉你有 几组又没有告诉你读到哪些特定的数 据结束。
1、只有一组测试数据
• 请看:送分题-A+B Problem • 这题只有一组测试数据,直接写即可。请 看以下三种不同语言所写的程序:
#include <stdio.h> int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int n_case; scanf("%d",&n_case); int i; for(i=0;i<n_case;i++) { int n; scanf("%d",&n); int sum = 0; int num; while(n--) { scanf("%d",&num); sum += num; } if(i) { putchar('\n'); //printf("\n"); } printf("%d\n",sum); } return 0; }
• 这样我们就可以用 while(scanf(......) != EOF) { …… …… } • 请看以下程序:
#include <stdio.h> int main() { int a,b; while(scanf("%d%d",&a,&b) != EOF) { printf("%d\n",a+b); } return 0; }

【牛客网】Python语言ACM模式输入输出规范

【牛客网】Python语言ACM模式输入输出规范

【⽜客⽹】Python语⾔ACM模式输⼊输出规范1.输⼊描述输⼊包括两个正整数a,b(1 <= a, b <= 10^9),输⼊数据包括多组。

输⼊ 1 5输出 6while True:try:a,b = map(int, input().split())print(a+b)except:breakwhile True:try:num=input().split()num=list(map(int,num))print(num[0]+num[1])except:break2.输⼊描述输⼊第⼀⾏包括⼀个数据组数t(1 <= t <= 100)接下来每⾏包括两个正整数a,b(1 <= a, b <= 10^9)输⼊21 510 20输出630n = int(input())for i in range(n):a = input().split()print(int(a[0])+int(a[1]))import sysn = int(input())for i in range(n):a,b = map(int,input().split())print(a + b)3.输⼊描述输⼊包括两个正整数a,b(1 <= a, b <= 10^9),输⼊数据有多组, 如果输⼊为0 0则结束输⼊输⼊:1 510 200 0输出630while True:try:a,b = map(int, input().split())if (a,b) == (0,0):breakelse:print(a+b)except:breakimport sysfor line in sys.stdin:line=line.split()temp=list(map(int,line))if temp[0]==0 and temp[1]==0:breakprint(temp[0]+temp[1])while True:try:temp=input().split()temp=list(map(int,temp))if temp[0]==0 and temp[1]==0:breakprint(temp[0]+temp[1])except:break4.输⼊描述输⼊的第⼀⾏包括⼀个正整数t(1 <= t <= 100), 表⽰数据组数。

acm输入输出

acm输入输出

ACM基本输入输出一、输入:1、只有一组测试数据,这时候是最简单的了输入Two integer a,b (0<=a,b<=10).输出Output a+b.示例输入1 2示例输出3C语言代码:#include < stdio.h >int main(){int a,b;scanf("%d %d",&a, &b);printf("%d\n",a+b);return0;}2、有多组测试数据,直到读至输入文件结尾为止,这时需要用到while(scanf("%d",&n)! =EOF)或while (cin>>n)输入The input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.输出For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.示例输入1 510 20示例输出630C语言代码:#include < stdio.h >int main(){int a,b;while(scanf("%d %d",&a, &b) != EOF)printf("%d\n",a+b);return0;}3、在开始的时候输入一个N,接下来是N组数据输入Your task is to Calculate a + b.输出For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.示例输入21 510 20示例输出630C语言代码:#include<stdio.h>int main(){int n,i;int a,b;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d%d",&a,&b);printf("%d\n",a+b);}return0;}4、输入不说明有多少组数据,但以某个特殊输入为结束标志输入Input contains multiple test cases. Each test case contains a pair of integers a and b, one pair of integers per line. A test case containing 0 0 terminates the input and this test case is not to be processed.输出For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.示例输入1 510 200 0示例输出630C语言代码:#include <stdio.h>int main(){int a,b;while(scanf("%d %d",&a, &b) &&(a||b))printf("%d\n",a+b);}5、还有一种是前几种的组合输入Input contains multiple test cases. Each test case contains a integer N, and then N integers follow in the same line. A test case starting with 0 terminates the input and this test case is not to be processed.输出For each group of input integers you should output their sum in one line, and with one line of output for each line in input.示例输入4 1 2 3 45 1 2 3 4 5示例输出1015C语言代码:#include<stdio.h>int main(){int n,sum,a;while(scanf("%d",&n) && n){sum=0;while(n--){scanf("%d",&a);sum+=a;}printf("%d\n",sum);}return0;}6、输入字符串。

Java的ACM输入输出格式

Java的ACM输入输出格式

Java的ACM输⼊输出格式ACM 格式1. 类名称必须采⽤ public class Main ⽅式命名2. 多组输⼊,读取到⽂件尾Scanner scan =new Scanner(System.in);while(scan.hasNext()){// 读整数int n = scan.nextInt();// 读⼩数double d = scan.nextDouble();// 读字符串String s = scan.next();// 读⼀整⾏String s = xLine();// 读⼤数BigInteger bi = scan.nextBigInteger();}// 或者 scan.hasNextInt()// 或者 scan.hasNextDouble()// 或者 scan.hasNextLine()3. 当数据较多时,可以采⽤更快的⽅式import java.io.BufferedInputStream;Scanner scan =new Scanner(new BufferedInputStream(System.in));4. Java 运算⼤数import java.math.BigInteger;//操作⼤整数import java.math.BigDecimal;//操作⼤⼩数import java.io.BufferedInputStream;import java.util.Scanner;import java.util.Arrays;public class Main{public static void main(String []args){BigInteger a,b,ans;Scanner scan=new Scanner(System.in);a=scan.nextBigInteger();b=scan.nextBigInteger();ans=a.add(b);//ans=a+b;ans=a.subtract(b);//ans=a-bans=a.mod(b);//ans=a%bans=a.divide(b);//ans=a/bans=a.max(b);ans=a.min(b); ans=a.multiply(b);}}next() 与 nextLine() 的区别:1. next() ⼀定要读取到有效字符后才可以结束输⼊,对输⼊有效字符之前遇到的空格键、Tab 键或 Enter 键等结束符,next() ⽅法会⾃动将其去掉,只有在输⼊有效字符之后,next() ⽅法才将其后输⼊的空格键、Tab 键或 Enter 键等视为分隔符或结束符2. nextLine() ⽅法的结束符只是 Enter 键。

关于ACM的输入输出

关于ACM的输入输出

写给第一次参加现场赛的同学们一般来说ACM的现场赛会规定输入输出或者是文件输入标准输出也可能是文件输入文件输出如果没有规定的话那么一般就是标准的输入输出了那说一下输入输出的重定向一般用下面两种方法c++常用:#include <fstream.h>ifstream filein("data.in"); // 定义一个文件输入流ofstream fileout("data.out"); //cout<< --> fileout<<filein.eof() //文件到末尾,返回非零值data.in表示输入的数据文件本地测试的话本来输入的数据就要在这个文件里面测试了建一个本地的文本data.in,可以用记事本的方式打开注意:文件输入的话,以后的cin>>都要改成filein>>, cout<<都要改成fileout<< c语言常用:freopen("date.in","r",stdin); //重定向所有标准的输入为文件输入freopen("date.out","w",stdout);//重定向所有标准的输出为文件输出fclose(stdout);//输出结束freopen("date.in","r",stdin); //重定向所有标准的输入为文件输入freopen("date.out","w",stdout);//重定向所有标准的输出为文件输出fclose(stdout);//输出结束第一句的意思就是文件输入,以"读状态",去替换标准的输入以上如果只是规定用文件输入输出的某一种,那么就只用其中的一种ACM题目特点: 由于ACM竞赛题目的输入数据和输出数据一般有多组(不定),并且格式多种多样,所以,如何处理题目的输入输出是对大家的一项最基本的要求。

ACM教程 输入输出

ACM教程 输入输出
注意!格式控制符要与输入/输出中的每一个输入/输出元素严格的对应,而且 输入元素时会不受其前导和元素后的空格(回车)的影响,有空格或回车隔 开的话,那就算是两个元素。
程序样例,输入两个整型变量a和b,并输出:
#include<stdio.h> int main() { int a,b; scanf("%d%d",&a,&b); printf("a=%d b=%d\n",a,b); return 0; }
还有就是我们有的时候需要在输出浮点数时,需要指定保留一定位数 的小数。这时,格式控制符应该使用: %.nlf
n是一个大于等于0的整数,这样可以来表示保留小数的后n位小数,保 留原则遵循四舍五入原则,假设一个双精度类型变量a的值为3.141592, 那么printf("%.3lf\n",a); 输出的值就应该是3.142。如果小数位数小于n 那么后面将用0来占位
因为输入输出函数的格式控制符从左至右与输入的元素一一对应,因此在编 程时程序员一定要保证格式控制符的正确性,由于编译器不会对格式控制符 列表做严格的检查,因此这里往往是初学者的易错点。
பைடு நூலகம்
格式控制符的其它用法:
可以在"%"和字母之间插进数字表示最大场宽。例如: %3d 表示输 出3位整型数, 不够3位右对齐。而%9lf 表示输出场宽为9的双精度浮 点数。 %8s则表示输出8个字符的字符串, 不够8个字符右对齐。但是, %8s 表示输出8个字符的字符串, 不够8个字符右对齐。 样例程序:
41 3
10 10
if 语句的另外一种形式:
if(表达式) {
语句块......
} 此时 if 没有与任意的 else 进行配对,那么程序在不满足 if 条件时会继 续执行 if 结构后面的语句。请分析下面程序: #include<stdio.h> int main() {

acmjava的输入输出

acmjava的输入输出

acmjava的输⼊输出这⾥指的java速成,只限于java语法,包括输⼊输出,运算处理,字符串和⾼精度的处理,进制之间的转换等,能解决OJ上的⼀些⾼精度题⽬。

1. 输⼊:格式为:Scanner cin = new Scanner (new BufferedInputStream(System.in));例程:import java.io.*;import java.math.*;import java.util.*;import java.text.*;publicclass Main{publicstaticvoid main(String[] args){Scanner cin = new Scanner (new BufferedInputStream(System.in));int a; double b; BigInteger c; String d;a = cin.nextInt();b = cin.nextDouble();c = cin.nextBigInteger();d = cin.ne xtLine(); // 每种类型都有相应的输⼊函数.}}2. 输出函数:System.out.print(); System.out.println(); System.out.printf();System.out.print(); // cout<< …;System.out.println(); // cout<< … <System.out.printf(); // 与C中的printf⽤法类似.例程:import java.io.*;import java.math.*;import java.util.*;import java.text.*;publicclass Main{publicstaticvoid main(String[] args){int a; double b;a = 12345;b = 1.234567;System.out.println(a + " " + b);System.out.printf("%d %10.5f\n", a, b); // 输出b为字宽为10,右对齐,保留⼩数点后5位,四舍五⼊.}}规格化的输出:函数:// 这⾥0指⼀位数字,#指除0以外的数字(如果是0,则不显⽰),四舍五⼊. DecimalFormatfd = new DecimalFormat("#.00#"); DecimalFormatgd = new DecimalFormat("0.000");System.out.println("x =" + fd.format(x));System.out.println("x =" + gd.format(x));3. 字符串处理java中字符串String是不可以修改的,要修改只能转换为字符数组.例程:import java.io.*;import java.math.*;import java.util.*;import java.text.*;publicclass Main{publicstaticvoid main(String[] args){int i;String st = "abcdefg";System.out.println(st.charAt(0)); // st.charAt(i)就相当于st[i]. char[] ch;ch = st.toCharArray(); // 字符串转换为字符数组.for(i = 0; iSystem.out.println(ch); // 输出为“bcdefgh”.if(st.startsWith("a")) // 如果字符串以'0'开头.{st = st.substring(1); // 则从第1位开始copy(开头为第0位).}}}BigInteger和BigDecimal可以说是acmer选择java的⾸要原因。

ACM竞赛之输入输出

ACM竞赛之输入输出
3、字符串中含回车
在这种情况下,如果没有题目的说明,程序无法知道哪里是字符串的分界。那么,用scanf("%c",&ch)来读,一边读,一边判断分界条件是否满足,如果满足,则把当前读到的东西存到一个字符串中。
三、输出处理
在初次接触ACM程序设计竞赛时,可能认为:样例中都是输入数据和输入数据在一起,输出结果和输出结果在一起,可能会开个数组,把每组的结果存起来,等输入完了再一起输出。当遇到不知有多少组测试数据的题,就难以处理了。
2. 多组输入数据,不说明多少组,直到读至输入文件末尾为止
示例:A + B Problem (1)
C语法:
#include <stdio.h>
int main()
{
int a,b;
while (scanf("%d %d",&a, &b) != EOF)
printf("%d\n",a+b);
03:memset(str, ' ', 1000 * sizeof(char));
04:sprintf(str, "%s", str1);
05:str[strlen(str1)] = ' ';
06:sprintf(str + 5, "%5s", str2);
07:str[10] = ' ';
其中“*”代表空格。
要求是这样的:str1在前5个字符中左对齐,str2在第6到第10个字符中右对齐,str3在第11到第15个字符中右对齐。
可行的做法是,先初始化一个数组,用' '(空格)填充,再在相应的位置填相应的内容。用程序来表述:

输入输出

输入输出

2. 3.
2013-5-10
20
输入_第二类:

输入一开始就会说有N个Input Block,下面 接着是N个Input Block。 参见:HDOJ_1090 /showproblem.ph p?pid=1090

2013-5-10
21
Hdoj_1090源代码:
(1). puts()函数只能输出字符串, 不能输出数值 或进行格式变换。 (2). 可以将字符串直接写入puts()函数中。

gets()函数 gets()函数用来从标准输入设备(键盘)读取字符串直到回 车结束, 但回车符不属于这个字符串。其调用格式为: gets(s); 其中s为字符串变量(字符串数组名或字符串指针)。 gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s) 函数输入字符串时存在一个问 题, 就是如果输入了空格会认为输入字符串结束, 空格后 的字符将作为下一个输入项处理, 但gets() 函数将接收 输入的整个字符串直到回车为止。 通常在用scanf读入一个非字符串的类型之后,如果 要读入字符,或字符数组,都用一个额外的getchar()把 回车符读掉,若后面跟的不止一个回车符,可能还有多 余的空格的话,就用gets()读掉。
非格式化输入输出函数

一、puts()和gets()函数 二、putchar()、getch()、getche()和 getchar()函数
2009

puts() puts()函数用来向标准输出设备(屏幕)写字符串 并换行, 其调用格式为: puts(s); 其中s为字符串变量(字符串数组名或字符串指 针) puts()函数的作用与语printf("%s\n", s)相同。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ACM新手之八大输入输出格式
文章分类:C++编程
在ACM题库中,不管是文件输出(输入)还是标准输出(输入),都有着一定的格式,下面我就以杭电1089——1096为例子,简单的介绍一下。

第一种:A+B for Input-Output Practice (I)
【输入】有多组输入数据,但没有具体的告诉你有多少组,只是让你对应每组输入,应该怎样输出。

【输出】有多组输出,对应着每组输入,每组输出占一行。

【代码】对于上述常见的情况,我们可以用下面的代码来解决。

没有告诉我们有多少组,我们只需要等待即可:while (scanf (……) != EOF)
相对应输入,输出只需要在while中输出。

【完整代码】
第二种:A+B for Input-Output Practice (II)
【输入】先输入一个整数,告诉我们接下来有多少组数据,然后在输入每组数据的具体值。

【输出】有多组输出,对应着每组输入,每组输出占一行。

【代码】这也是一种常见的输入形式,简单的代码,我们可以先用scanf函数输入第一个整数来确定有多少行,然后在用for循环一组一组的输入。

【完整代码】
第三种:A+B for Input-Output Practice (III)
【输入】有多组输入数据,没有具体的告诉你有多少组,但是题目却告诉你遇见什么结束。

【输出】有多组输出,没对应一组输入都有相应的输出,结束标记不用管!
【代码】这种类型的题目和第一种差不多,但是有一点值得注意,就是要加上结束条件。

对于这道题我么
可以这样while(scanf(“%d%d”, &a, &b) && (!(a==0 && b==0))),当然你也可以将条件写在while循环的内部,条件满足时break即可。

【完整代码】
第四种:A+B for Input-Output Practice (IV)
【输入】输入有多组,并却题目告诉你每组输入遇见什么结束,与第三种不同之处在于,每组输入都有相应的细化。

【输出】没有什么变化,只需要对应输出即可。

【代码】这类题目的代码是在第三种代码的基础之上,对于每种输入都进行第二种的精确输入。

代码二者结合即可!【完整代码】
第五种:A+B for Input-Output Practice (V)
【输入】这次的输入实现输入一个整数,告诉我们有多少行,在输入每一行。

对于每一行的输入,有划分为第一个数和其他的数,第一个数代表那一组数据一共有多少输入。

【输出】没有变化,只需按照提议即可!
【代码】代码没有什么,只是在第二种代码的框架上,在进行第二种输入的细化,对于每组输入都运行第二种的代码框架!【完整代码】
第六种:A+B for Input-Output Practice (VI)
【输入】有多种输入数据,对于每组输入数据的第一个数代表该组数据接下来要输入数据量。

【输出】同上!
【代码】这种类型的代码,就是再套上第一种代码的框架上,进行第三种代码的细化,没有什么特殊性。

【完整代码】
第七种:A+B for Input-Output Practice (VII)
【输入】同第一种一样
【输出】这道题的输出只是简单的在每组输出后边多加一个换行而已!
【代码】在每组输出的后边多加一个换行符’\n’【完整代码】
第八种:A+B for Input-Output Practice (VIII)
【输入】类似于第三种
【输出】这种类型的输出注意的就是换行,这类题目说在输出样例中,每组样例之间有什么什么,所以我们在对应输出的同时要判断一下是否是最后一组输出,如果不是,就将题目所说的东西输出(一般是换行或空格),如果是,就直接结束。

【代码】没有什么说的,你在判断是否结束不方便的时候可以判断是否开始,类似于判断结束的代码。

如用for输入,一般判断结束,如用while输入一般判断初始。

【完整代码】
【综上所述】
根据上边介绍的八种输入输出,我们可以归纳出如下内容:
对于输入,如果没有告诉你有多少组,我们常用while。

如果告诉你有多少组,我们用for。

对于输出,输入用while,我们常常判断是否为第一个输出样例,来指定特殊的输出格式。

输入用for,我们常常判断是否为最后的输出样例,来指定特殊的输出格式。

当然输入输出的格式远远不止上边的八种,但它们却是最常见的,特别是前三种是一定要掌握的。

相关文档
最新文档