1 单字符输入输出
1.1 putchar
int putchar (int c)
输出一个字符:
c 可以是一个字符 'a'
可以是字符ASCII 65
可以是字符变量 char ch='A'
可以是一个字符的算术表达式 'A' + 32
返回值:
成功:返回对应ASCII,将char类型转换为int类型
失败:返回错误码EOF(-1)
1.2 getchar
int getchar(void)
获得一个字符,可以吃掉垃圾字符:
无参数
成功:返回字符对应ASCII
失败:返回错误码EOF
空格 tab 回车也是一个字符
2 字符串输入输出
2.1 puts
int puts(const char *s)
输出一个字符,输出后自动输出一个换行符:
输出可以是字符串常量 "hello"
可以是一个字符数组 char str[100] = "world"
可以是一个字符指针 cahr *p = "hello world"
成功:返回非负的正数,输出字符的个数,即字符串长度+1
失败:返回错误码EOF
2.2 gets
char *gets(char * s)
获取一个字符串:
存储获取字符串的缓冲区的首地址
传递一个字符数组名,使用字符数组存储字符
成功:返回字符串地址
失败:返回空指针
char buffer[10];//存储字符串长度最大为9,要留一个\0空间
gets(buffer); //输入字符串长度大于9,gets不会自动结束,
当enter键按下时字符串结束,字符数组无法存储超过的字符串,
非法空间写入数据,核心已转储报错
puts(buffer);
3 格式化字符串输入输出
3.1 printf
int printf(const char *format,...)
输出格式化字符串:
format:输出的格式化字符串
... :可变参数
成功:返回打印字符个数
失败:返回一个负数
3.2 scanf
int scanf(const char *format, . . .)
从终端接收数据赋值给变量:
format:输出的格式化字符串
... :可变参数
成功:返回接收数据条目个数
失败:返回错误码
int main(int argc, const char* argv[])
{
double pi;
scanf("%lf", &pi);//小数形式浮点小数long型
printf("pi = %le\n", pi);//小数形式输入,指数打印3.14——>3.140000e+00
scanf("%le", &pi);//指数输入小数打印 3.1415e2——>314.150000
printf("pi = %lf\n", pi);
unsigned int x;
scanf("%x", &x);
printf("%#x\n", x);//AF——>0xaf
scanf("%o", &x);
printf("%#o\n", x);//067——>067 678——>067 因为8超过8进制
char buf[10];
scanf("%9s", buf);//输入字符串遇到空格,tab,回车就会结束接收,只接收9个字符
int a;
int b;
scanf("%d%*d%d", &a,&b);
printf("%d,%d\n", a, b);
int a, b, c;
scanf("%d%d%d", &a, &b, &c);//连续输入以空格,tab,回车符为分隔符
//1.:
char buf[20];
scanf("%s", buf);//只接受空格前面的
gets(buf);//可以接收带空格字符串
printf("%s\n", buf);
while (getchar() != '\n');//吃掉换行
gets(buf);//读取缓冲区剩余字符
printf("%s\n", buf);
//2.:
char buf[20];
scanf("%[^\n]s", buf);//除了回车都能接收
printf("%s\n", buf);
//3.:
int a;
scanf("%d\n", &a);
printf("%d\n", a);//有\n,\r,\t,空格时,输入按回车没有用,输入任意字符scanf才会退出
//4.:
int d;
scanf("a = %d", &d);
printf("%d \n", d);//原样手输入
//5.只有输入字符串或%c(空格,tab,回车会认为是字符)才接收垃圾字符,输入数字如果有其他字符不会接收
return 0;
}