# C语言输入输出
## 字符输入输出
* getchar / putchar
* scanf / printf
```
scanf("%c",&c); //将数据放入变量需要 & 取地址符
```
```
// scanf 与 printf 的应用
#include <iostream>
using namespace std;
int main()
{
float x; int n;
pritnf("input:");
scanf("%f%d", &x, &n);
printf("%f%d", x, n);
putchar('\n');
return 0;
}
```
```
#include <iostream>
using namespace std;
int main()
{
int n;
n = 1000;
//printf("%f",n); 数据类型不匹配!
printf("%f", 1.0*n); //不同进制%x %o
printf("%-10d",n);
putchar('\n');
/*双精度数据
double n;
n = 1.23456789;
printf("%.2f",n); //%.2f取小数点后两位
printf("%e",n); //指数形式
putchar('\n');
*/
return 0;
}
```
#### printf 就讲到这里,不用死记硬背,在用中学习记忆
* 说明: & 是取地址运算符,scanf 的格式控制串里不要加多余的空格或'\n'
# C++语言输入输出
* cin / cout 标准输入输出流
```
#include <iostream>
using namespace std;
int main()
{
char c;
cin >> c;
cout << (char) (c - 32) << end; //由于涉及算数运算,输出时要将数据类型转换为 char
/*
char c1, c2;
cin >> c1 >> c2;
cout << (char)(c1 - 32) << (char)(c2 - 32) << endl;
*/
/*
char c1; int c2;
cin >> c1;
cin >> c2;
cout << c1 << c2; //数据输入输出类型要一致
*/
return 0;
}
```
* cout 格式控制
* setw() / setiosflags(ios::left) / setfill() / setprecision()
```
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout << setw(8) << 'a' //预留 8 个字符位置
<< setw(8) << 'b' << endl;
/* setiosflags() 和 setfill() 的效果
cout << setiosflags(ios::left) //靠左
<< setfill('*') //填充空白字符为“*”
<< setw(8) << 'a'
<< setw(8) << 'b' << endl;
*/
/*设置浮点数精度 setprecision()
double f = 17 / 7.0;
cout << setiosflags(ios::fixed) //设置显示类型
<< setprecision(3) << f << endl;
*/
return 0;
}
```
* string 处理字符串
* string 不是基本数据类型
```
#include <string> //不要忘
```
```
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str1; //定义 string 对象
string str2("Hello"); //定义并初始化
string str3 = str2; //定义并初始化
/* string 的输入输出
string str1, str2;
str1 = "123", str2 = "abc";
str3 = str1 + str2;
//cin >> str1 >> str2;
cout << str1 << ' ' << str2;
*/
return 0;
}
```
* 文件的输入输出
* fstream 文件流对象
```
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
/* idata.txt 内容
1
2
3
4
5
6
7
8
9
10
*/
ifstream ifile("idata.txt");
int sum = 0, value;
cout << "data:";
while(ifile >> value) //只要还有数据未读完就一直循环
{
cout << value << " ";
sum += value;
}
cout << endl;
cout << "sum is:" << sum << endl;
return 0;
}
```