freopen("C:\out.txt","r",stdin)//输入 freopen(“out.txt”,"w",stdout)//输出
也可以在程序运行时临时修改
abc.exe<in.txt; abc.exe>out.txt;
程序竞赛题目的特点
只做三件事:1、读入数据。2、计算结果。3、打印输出。
提示
竞赛中,输入输出不要打印提示信息,例如(please input n:),不要打印解释信息。输出完毕立刻终止程序,不要等待用户按键。严格按照要求,也要注意空格。不可以多输出输入。
第一类输入
1、输入不说有多少组,一般以EOF结束标志。
while(scanf("%d %d",&a,&a)!=EOF) { ............... }
while(cin>>a>>b) { ...... }
scanf函数返回值就是读入变量的个数,如scanf("%a%b",&a,&b),如果a和b都被成功读入,返回值是2,如果只有a读入返回值是1,如果都没有读入返回值是0。如果遇到错误或者遇到end of file 返回值是EOF,EOF默认值是-1.
#include<stdio.h> int main() { int a,b; freopen("in.txt","r",stdin); printf("%d",scanf("%d%d",&a,&b)); }
建立一个txt文本,在程序目录下,然后输入数据。
#include<stdio.h> int main() { int a,b; freopen("in.txt","r",stdin); while(scanf("%d %d",&a,&b)!=EOF) printf("%d ",a+b); }
#include<stdio.h> int main() { int a,b; freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); while(scanf("%d %d",&a,&b)!=EOF) printf("%d ",a+b); } //运行后直接自动建立了一个out.txt文本在程序目录下
第二类输入
一开始要求输入正整数N,然后输入N组数据
#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 ",a+b); } }
第三类输入
不说明有多少组数据,但是以某个特殊输入为结束标志。
例如:以0 0为结束标志
#include<stdio.h> int main() { int a,b; while(scanf("%d %d",&a,&b)&&!(a==0&&b==0)) { printf("%d ",a+b); } }
如果输入以0结束的话
while(scanf("%d",&n)&&n!=0) { ...... }
输入第四类
输入一整行的字符串(字符串中可含有空格)
凯撒密码
#include<stdio.h> #include<string.h> int main() { char buf[20]; gets(buf); for(int i=0;i<strlen(buf);i++) { if(buf[i]>='A'&&buf[i]<='Z') buf[i]='A'+((buf[i]-'A'+('D'-'A'))%26); } puts(buf); }
本类输入
char buff[10]; gets(buff);
如果用string buff来保存getline(cin,uff); 如果用char buff[10];来保存cin.getline(buf,10);
说明
1、scanf("%s%s",str1,str2)在多个字符串之间用一个或者多个空格间隔。
2、若使用gets函数应为gets(str1);gets(str2),字符串之间用回车符做间隔。
3、通常情况下接受短字符用scanf接受长字符用gets
4、getchar每次只接受一个字符,经常c=getchar();这样来使用。
例如:while((a=getchar())!=' ')