C语言中让人头疼的输入与输出

数据类型格式符举例
int%dscanf("%d",&n)
long long%lldscanf("%lld",&n)
float%fscanf("%f",&f1)
double%lfscanf("%lf",&db)
char%cscanf("%d",&c)
char数组%sscanf("%d",str)

str:数组名称本身代表了数组第一个元素的地址,所以不用加取址运算符。

例子:

  1. 输入13:45:20这种hh:mm:ss
int hh,ss,mm;
sacnf("%d:%d:%d",&mm,&ss,&mm);
  1. 输入3 4以空隔分开的2个数字
int a,b;
sacnf("%d%d",&a,&b);

不加空格的原因是除了%c,sacnf的输入是以空格,换行为结束标志的。

  1. 输入3 c以空隔分开的字母和字符
int a; char c;
scanf("%d %c",&a,&c);
  1. %s读入时以空格,换行为结束标志
#include <cstdio>
int main(){
	char str[10];
	scanf("%s",str);
	printf("%s",str);
	return 0;
}

输入:abc ef
输出:abc

  1. %c读入时是可以读入空格和换行的
#include <cstdio>
int main(){
	int a; char c;char x='b';
	scanf("%d%c",&a,&c);
	printf("%d%c%c",a,c,x);
}

输入:4回车
输出:
4
b

输入:4空格回车
输出:
4 b

下面这个例子特别重要

#include <cstdio>
int main(){
	int a;
	char c,str[10];
	scanf("%d%c%s",&a,&c,str);
	printf("a=%d,c=%c,str=%s",a,c,str);
	return 0;
}

输入:1 a bcd
输出:a=1,c= ,str=a

  • getchar和putchar
#include <cstdio>
int main(){
char c1,c2,c3;
c1=getchar();
getchar();
c2=getchar();
c3=getchar();
putchar(c1);
putchar(c2);
putchar(c3);
return 0;
}

输入:abcd
输出:acd
'a’被c1接收,'b’虽然接收但没有将它存储在某一个变量中,'c’被c2接收,'d’被c3接收,所以最后输出acd
getchar可以识别空格和换行符

输出

  • printf函数
    printf(“输入格式”,变量名称),例如printf("%d",a);
数据类型格式符举例
int%dprintf("%d",n)
long long%lldprintf("%lld",n)
float%fprintf("%f",f1)
double%fprintf("%lf",db)
char%cprintf("%d",c)
char数组%sprintf("%d",str)

特别的输出要求

  1. %md:不足m位的int型右对齐输出,高位用空格补齐,变量本身超过m位时,保持原样。
#include <cstdio>
int main(){
int a=123;int b=1234567;
printf("%5d\n",a);
printf("%5d\n",b);
return 0;
}

输出:
  123
1234657

  1. %0md:不足m位的int型右对齐输出,高位用0补齐,变量本身超过m位时,保持原样。
    (舍入规则:四舍六入五成双)
#include <cstdio>
int main(){
int a=123;int b=1234567;
printf("%05d\n",a);
printf("%05d\n",b);
return 0;
}

输出:
00123
1234657

  1. %.mf:浮点型保留m位小数。
#include <cstdio>
int main(){
double d1=3.1415926;
printf("%.0lf\n",d1);
printf("%.1lf\n",d1);
printf("%.2lf\n",d1);
printf("%.3lf\n",d1);
printf("%.4lf\n",d1);
return 0;
}

输出:
3
3.1
3.14
3.142
3.1416

字符数组的输入与输出

字符数组是由若干个char型的元素组成,数组的每一位都是一个字符。在一维数组中(或者是二维数组的第二维)的末尾都有一个空字符\0表示存放字符的结尾。gets和scanf会自动添加在输入字符的后面并且占用一个字符位,所以要注意数组定义的大小。puts和printf通过\0为结尾来来输出的。getchar 要在输入的每个字符串后加\0
下面是二维数组存储两个字符串“Ni Hao ,”和"Kao Yan."

NiHao,\0
KaoYan.\0
  1. scanf输入,printf输出
    %s通过空格或换行结束
#include <cstdio>
int main(){
	char str[10];
	scanf("%s",str);
	printf("%s",str);
	return 0;
}

输入:abc ef
输出:abc

  1. getchar 输入,putchar输出
#include <cstdio>
int main(){
	char str[20];
	int i,k=0;
	for(i=0;i<10;i++){
		str[i]=getchar();
	}
	str[5]='\0';
	while(str[k]!='\0'){
		putchar(str[k++]);
	}
	return 0;
}

输入:abc defghi
输出:abc d

  1. gets输入,puts输出
    gets识别换行符\n作为输入结束(所以sacnf完一个整数时,如果想用gets,必须getchar接收整数后的换行符)。
#include <cstdio>
int main(){
	char str[20];
	int a;
	scanf("%d",&a);
	getchar();
	gets(str);
	puts(str);
	return 0;
}

输入:
6
abc
输出:6abc

#include <cstdio>
int main(){
	char str1[20];
	char str2[5][10];
	gets(str1);
	for(int i=0;i<3;i++){
		gets(str2[i]);
	}
	puts(str1);
		for(int i=0;i<3;i++){
		puts(str2[i]);
	}
	return 0;
}

输入:
woaini
love you
like you
qaq
输出:和输入一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值