1.输入sscanf scanf 输出sprintf printf
(1)scanf()和printf()
1 | scanf("%d",&n); |
事实上上面的写法其实可以表示成下面的样子,其中screen表示屏幕:
1 | scanf(screen,"%d",&n); |
可以发现,scanf的输入其实是把screen的内容以”%d”的格式传输到n中(即从左至右)。
而printf的输出则是将n以”%d”的格式传输到screen上(即从右至左)。
(2)sscanf()和sprintf()
1 | char str[100]; |
上面sscanf写法的作用是把字符数组str中的内容以”%d”的格式写到n中(仍然是从左至右)。
而sprintf写法的作用是将n以”%d”的格式写到str字符数组中(从右至左)。
2. scanf() 和 cin
(1)优点:
cin/cout:方便。
scanf/printf: 控制读入简单直观,读入时间快。
(2)缺点:
cin/cout:控制输入数据时打起来比较麻烦,需要记一些函数,读入时间慢。
scanf/printf:容易打错。
3.竞赛中常见输入格式
(1)while···EOF型
scanf函数的返回值为其成功读入的参数的个数。
scanf(“%d%d”,&a,&b)成功读入两个整数a,b那么scanf的返回值就是2。
正常控制台的输入一般是不会失败的,只有在读取文件时达到文件末尾导致的无法读取现象,才会读入失败,这个时候,scanf函数会返回-1而不是0,且c语言中使用EOF(即End Of File)来代表-1。
读入数据
1 | int n; |
读入字符串
1 | while(scanf("%s",str) != EOF){ |
(2)while···break型
这种类型是while···EOF型的延伸,要求当输入的数据满足某个条件时停止输入。
这种类型有两种写法,一种是在while···EOF的内部进行判断,当满足退出条件时中断当前while循环
1 | int a,b; |
另一种简洁的写法是,把退出条件的判断放到while语句中,令其与scanf用逗号隔开
1 | int a,b; |
(3)while(T–)型
在这种类型中通常给出测试数据的组数,然后才给出相应数量组数的输入数据。
1 | int T,a,b; |
4.竞赛中常见的输出格式
(1)正常输出
这种输出类型要求需要每两组输出数据中间没有额外的空行和空格
(2)每组数据输出之后都要额外增加一个空行
1 | int a,b; |
(3)两组数据之间有一个空行,最后一组数据后面没有空行
1 | int T,a,b; |
与这种要求类似的要求是:输出一行N个整数,每两个整数之间用空格隔开,最后一个整数后面不允许加上空格,做法类似.
1 | for(int i=0;i<N;i++) |