C++ 知识点选讲 2——程序基本输入输出语句(cin、scanf 等)
1 cin cout
cin 等语句在竞赛中非常重要,下至红、上至黑,大部分的题目都需要它和其他输入输出语句。
C++ 中有很多数据类型,大部分都可以实现用 cin 等语句输入。例外是有的,如 __int128。
实现不同类型变量的输入:
int a;
cin>>a;
char b;
cin>>b;
long long c;
cin>>c;
string d;//string 最好引入 <cstring>、<string> 等库,当然我推荐用万能头
cin>>d;
bool e;
cin>>e;
...
用上 cin 后,变量就可以从终端被输入了!
cout 同理,用于输出变量或其他。
实现不同类型变量的输出:
int a;
cout<<a;
char b;
cout<<b;
long long c;
cout<<c;
string d;//string 最好引入 <cstring>、<string> 等库,当然我推荐用万能头
cout<<d;
bool e;
cout<<e;
...
输入输出可以不止一个变量,例子:
你运行下面的伪代码后,输入 \(3,5\)。
int a,b;
cin>>a>>b;//输入完后,a=3,b=5
cout<<a<<" "<<b;//输出完,你会看到:
/*3 5*/
cout<<a<<endl<<b;//endl 用于换行,你会看到:
/*
3
5
*/
//上面的 "/*" 和 "*/" 用于多行注释,实际操作时控制台不会显示,因为我只是为了显示方便。
cout 还能输出字符串:
cout<<"Hello, world!";//以上代码会输出:Hello, world!
cout<<"Hello, world!\n";//在没开 IOS 的情况下,\n 可用于输出换行
在一些题目中,会要求选手输入一个带空格的字符串,此时我们需要用到如下语句:
getline(cin,s);
其中 s 为你需要输入的字符串。
有时选手在实际做题中需要消除输入中的换行,建议使用 cin.ignore();。
输出 a 并保留 \(n\) 位小数怎么写呢?答案是:cout<<fixed<<setprecision(n)<<a;。下文讲的 printf 会更加简洁。
输出一个 int 变量 a,保留 \(4\) 个场宽怎么写?答案是:cout<<setw(4)<<a;。下文的 printf 会更加简洁。
IOS 加速
加上下面的语句,cin 和 cout 会更快:
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
当然还会有其他高级应用,暂且不提。
2 scanf printf
我们除了接触的 cin、cout 外,还有许多方式可以输入和输出。
scanf 是一种输入语句,printf 是一种输出语句。两者皆为 C 风格。速度比不开 IOS 的 cin 快。如果开了 IOS 就不要用了 scanf,会出问题。
不同的类型,scanf 与 printf 的用法不一样。具体可以参考下表(以输入一个变量 a 为例):
| 类型 | 输入方法 |
|---|---|
int |
scanf("%d",&a); |
long long |
scanf("%lld",&a); |
double |
scanf("%lf",&a); |
char |
scanf("%c",&a); |
string |
不可以,请使用 cin 或 getchar |
unsigned long long |
scanf("%ull",&a); |
输入字符串建议用 char 数组。一个 char 数组 s 的输入方式:scanf("%s",&s);
如果想做到从下标为 \(1\) 的地方作为 char 数组 s 开头,可以用:scanf("%s",s+1);
PS:上面的 & 字符是取地址符。printf 不需要。
printf 的输出不需要取地址符,方式与 scanf 大致相同。
例(输出一个 int 变量 n):
printf("%d",n);
输出 a 并保留 \(n\) 位小数怎么写呢?答案是:printf("%.nlf",a);,比上文的 cout 好写。
输出一个 int 变量 a,保留 \(4\) 个场宽怎么写?答案是:printf("%4d",a);,比上文的 cout 好写。
scanf 和 printf 同样可以对变量进行输入(输出)等操作:
scanf("%d %d",&a,&b);
scanf("%d:%d",&a,&b);//主要用于输入的两个变量间有 “:” 之类的字符隔开。如输入 22:44,该语句执行完后 a=22,b=44
printf("%d %d\n",a,b);
printf("Hello, world!");
...
3 其他输入输出方法
-
getchar():输入一个字符。比开 IOS 的cin快。一般用于快读。 -
putchar():输出一个字符。比开 IOS 的cout快。一般用于快输。 -
puts():输出一个字符串并自动换行。 -
gets():不要使用,有安全隐患。
有问题可以评论区提问。
浙公网安备 33010602011771号