c语言中常见的输入输出方式

#include<stdio.h>
int main()
{
	int a,b;
	float c,d;
	long e,f;
	unsigned int u,v;
	char c1,c2;
	scanf("%d,%d",&a,&b);
	scanf("%f,%f",&c,&d);
	scanf("%ld,%ld",&e,&f);
	scanf("%o,%o",&u,&v);
	getchar();
	scanf("%c,%c",&c1,&c2);
	printf("a=%4d b=%4d\n",a,b);
	printf("c=%8.2f d=%8.2f",c,d);
	printf("e=%16ld f=%16ld\n",e,f);
	printf("u=%o v=%o\n",u,v);
	printf("c1=%c c2=%c\n",c1,c2);
	return 0;
}

1.这里的getchar()的作用

        吸收换行符,防止换行符作为一个符号存储到c1变量中,导致你原本打算存在c1中的符号存在了c2里,原本要存在c2的符号没有地方存储,从而出现问题(注意这里的c1,c2是字符型变量,如果是其他类型的变量,就不用加getchar()了)

代码实现:

// 1.加getchar()
#include <stdio.h>

int main() {
	int a, b;
	char c1, c2;
	scanf("%d,%d", &a, &b);
	getchar();
	scanf("%c %c", &c1, &c2);
	printf("%4d,%4d\n", a, b);
	printf("c1=%c c2=%c\n", c1, c2);
	return 0;
}
//2.不加getchar()
#include <stdio.h>

int main() {
	int a, b;
	char c1, c2;
	scanf("%d,%d", &a, &b);
	//getchar();
	scanf("%c %c", &c1, &c2);
	printf("%4d,%4d\n", a, b);
	printf("c1=%c c2=%c\n", c1, c2);
	return 0;
}

运行结果:(图一为上述第一个代码实现   图二为上述第二个代码实现)

                  

2. 1> printf("%05d",m);// '%05d',输出占五位,不足者用0补位 m为变量

     2> a=%4.2d的意思是将a的值以四个宽度容纳(可以理解为有四个位置,例如 输入一个100就是占了三个位置空了一个位置);.2表示输出时保留两位小数

     3>一般情况下所有输出默认右对齐。实现左对齐的方法是加个负号。以2>中的数据为例的话就是a=%-4.2d

 

3.int 类型的数据实现四舍五入的一种方法:

eg:int time,count;(将time和count的比值四舍五入输出)

printf("%d",(int)((double)time/count+0.5))

4.int i=4,a;

   若a=i++,则a=4;若a=++i,则a=5;

原因:a=i++是先将i的值赋值给a,i再进行自加操作;a=++i是i先进行自加操作,再赋值给a

注意:i++,++i不能连用。即a=(i++)+(i++),a=(i++)+(++i),a=(++i)+(i++)等写法都是不对的,可能不同的编译器出来的运算结果都不一样

5.实现多组输入的两种方式:
  1>int n;

      while(scanf("%d",&n)!=EOF){其他代码

       }

   2>int n;

       while(~scanf("%d",&n)){其他代码

       }

若无特殊要求(例如:当n==0时程序结束),使用(“\n”+"Ctrl"+"z")可以使程序结束

6. 1>int n=4;

        while(n--){

        }

     2>int n=4,i;

        for(i=1;i<=n;i++){

        }

      两种写法作用一致。唯一的区别在于第一种写法会改变n的值,而第二种写法不会

7.二维数组赋初值时可以省略行下标,但是不能省略列下标。

   例如:a[][3]={1,2,3,4,5,6},数组元素个数除以列数,正好除尽,所得的商就是行数;

              a[][3]={1,2,3,4},数组元素个数除以列数,除不尽,商的整数部分加一就是行数,未赋值的元素默认初始化为0.

当然了,还可以借助memset或者vector容器

除此之外将二维数组开成全局变量的话数组内的元素会默认初始化为0.

8.printf()用%f和%lf都可以输出double类型的数据,但是double类型的数据输入时必须用%lf。

上网搜了一下:根据“默认参数提升”规则(在printf这样的函数可变参数列表中,不论作用域内有没有原型,都适用于这一规则)float型会被提升为double类型。因此printf只会看到双精度。     对于scanf,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样。

9.int 不是unsigned类型的时候,最高位为0,即int的最大值为2^31-1

10.while()是循环语句,当括号内的数字为0时循环不执行,非0时循环执行。

“!”是取反的意思

例如:while(!y)当y=0时循环执行,其余情况则不执行。

最后的话就是要注意像空格啊,换行啊之类的小细节

记录一下当初的学习历程,也方便以后回顾。写的不好,如果出现问题,欢迎批评指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值