在C语言中,输入使用的是scanf函数,scanf函数的格式为scanf(格式控制,地址列表),如scanf("%d"&a)。
输出使用的是printf()函数,printf函数的格式为printf(格式控制,输出表列),如printf("%d\n",a)。在输出时可以在"%"和字母之间插进数字表示最大场宽。可以根据需要输出数字的位数来决定“%”前的数值。
如:%3d表示输出3位整型数, 不够3位右对齐。
%9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为7,小数点占一位, 不够9位右对齐。
%8s 表示输出8个字符的字符串, 不够8个字符右对齐。
扩展资料
C语言输入输出时的规则:
一、格式说明符个数与输入数据个数不相等的情况:
当我们输入数据时,只要没有按回车键,所输入的数据都还存放在缓冲区,并没有存入变量中。按【Enter】键后,scanf()函数才会从缓冲区中取走数据。缓冲区是一个先进先出的队列,即取走数据的时候,遵循先输入的数据先取走的原则。
scanf函数的格式说明符有几个就要取几次数据,只要碰到格式说明符就必须把数据取走,至于是不是要把取走的数据存放起来,就得看数据列表中的数据个数。没取完的数据继续留在缓冲区中。
二、宽度输出的情况:
1、在%和格式字符之间加入一个整数来控制输出数据所占宽度
2、在%和格式字符f之间加入一个“整数1. 整数2”来控制输出数据的格式。
整数1:整个输出数据占的总宽度
整数2:输出实数的小数部分的个数
注意:先用整数2处理小数部分,再用整数1处理整个数据,包括已处理好的小数部分
三、宽度输入的情况:
宽度输入指的是在%和格式说明符d之间加入一个整数。如:scanf("%2d", &x)
注意:
1、%d与%1d是不同的,它们具有不同的含义。
2、 当宽度小于数据的实际宽度时,截取指定宽度的部分作为一个数进入缓冲区,再将剩余部分作为另一个数放入缓冲区。
参考资料来源:百度百科——scanf
百度百科——printf()
因为字符数组,数组名本身就是指一个地址。
定义了字符型数组char name[10]。name有两个含义:一个是代表着name这个数组第一个位置的地址,也就是name[0]的地址。可以说name就等价于&name[0]。
还有一种意思就是指代name整个数组。&name 就是整个数组的首地址。所以name和&name取得的地址是相同的。
扩展资料
name和&name区别:
不同点在于:name+1表示的是数组第二个元素的地址,而&name+1表示的是整个数组后又一个name数组的首地址,即&name[10]后一个新的name数组的首地址。例如:
#include<stdio.h>
int main(void)
{
char name[10]={"hello csdn"}
printf("name+1的地址:%p\n",name+1)
printf("&name+1的地址:%p\n",&name+1)
return 0
}
所以说scanf("%s",name)和scanf("%s",&name)执行后的结果是一样的,都是name的首地址,都是给字符数组name赋值。推荐用 scanf("%s",name),第二种不容易理解也容易犯错,有些编译软件也不支持会报错。
因为输入格式是确定的,所以,可以用一个计数循环轻松搞定。#include <stdio.h>void getmac(unsigned char *p){int i for(i=0i<6i++) scanf("%2x%*c",&p[i])}int main(){ unsigned char macadr[6] int i getmac(macadr) for(i=0i<6i++)printf("%d ",macadr[i]) return 0}