c语言中getchar的用法详解(C语言-数据如何输入与输出)
1.常用输入输出函数
字符输出函数putchar
putchar函数是字符输出函数,其功能是在终端(显示器)输出单个字符。其函数原型为:
int putchar(int ch);
ch表示要输出的字符内容,返回值作用为:如果输出成功返回一个字符的ASC码,失败则返回EOF即-1
#include<stdio.h>
int main()
{
char x = 'B';
putchar('A');
putchar(x);
putchar('\n');
putchar('\C');
return 0;
}
字符输入函数getchar
getchar函数的功能是接收用户从键盘上输入的一个字符。其一般调用形式为:
getchar();
getchar会以返回值的形式返回接收到的字符.
#include<stdio.h>
int main()
{
char c;
c = getchar();
printf("%c", c);//将读取的字符赋值给字符变量c
return 0;
}
格式化输入函数scanf
scanf函数称为格式输入函数,即按照格式字符串的格式,从键盘上把数据输入到指定的变量之中。Scanf函数的调用的一般形式为:
scanf(“格式控制字符串”,输入项地址列表);
其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表项中的地址给出各变量的地址,地址是由地址运算符”&”后跟变量名组成的。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
float a;
scanf("%f", &a);
printf("%f", a);
return 0;
}
输入long类型数据时必须使用%ld,输入double数据必须使用%lf或%le。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
long a;
scanf("%ld", &a);
printf("%ld", a);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
double x;
scanf("%lf", &x);
printf("%lf", x);
}
附加格式说明符”*”使对应的输入数据不赋给相应的变量。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a;
printf("请输入数字:\n");
scanf("%*d %*d %d", &a);
printf("%d", a);//999
return 0;
}

格式化输出函数printf
printf函数叫做格式输出函数,其功能是按照用户指定的格式,把指定的数据输出到屏幕上.printf函数的格式为:
printf(“格式控制字符串”,输出表项);

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a = 12;
float b = 3.14156;
char c = 'A';
printf("%d\n", a);
printf("o%o\n", a);//八进制
printf("0x%X\n", a);//十六进制
printf("%3.4f\n", b);//小数点后4位
printf("%c\n", c);
return 0;
}
2.d%格式字符
%d按整型数据的实际长度输出。
%[0]md以m指定的字段宽度输出,如果数据的位数小于m,则左端补以空格;若m前面有"0”,则左端补以0。
%md以m指定的字段宽度输出,左对齐。
%ld输出长整型数据
#include<stdio.h>
int main()
{
int x = 123456;
printf("%d\n", x);
printf("%10d\n", x);//一共10个宽度
printf("%3d\n", x);//因为数字长度大于3,所以没有影响
printf("%010d\n", x);//一共10个宽度,因为第一位是0,所以左边补0
printf("%-10d", x);
printf("aaa");
printf("%ld", x);//32位系统,D,LD是一样在,有些系统,D是短整形
return 0;
}
3.无符号八进制十进制十六进制格式符
%d : 以十进制形式输出数据
%o : 以八进制形式输出数据
%x : 以十六进制形式输出数据
%u : 以十进制形式输出unsigned型数据
#include<stdio.h>
int main()
{
int x = -1;
printf("%p", &x);
printf("%d,%u,%o,%x", x,x,x,x);
return 0;
}


4.输出不同的类型的整数
short
int main()
{
short sh1, sh2;//默认是signed ,有符号
sh1 = 19;
sh2 = -19;
unsigned short ush1;
ush1 = 256;
//有符号,无符号都是占2个字节
printf("%d,%d\n", sizeof(signed short), sizeof(unsigned short));//2,2,
printf("%hd\n", sh1);//%hd 对应有符号
printf("%hd\n", sh2);
printf("%hu\n", ush1);//%hu 对应无符号
}
#include<stdio.h>
#include<limits.h>
int main()
{
//有符号Short最大,最小
//第一位是符号位,0为正,1为负
printf("%hd,%hd\n", SHRT_MAX, SHRT_MIN);
//无符号Short最大,最小
//16位全是数据
printf("%d,%d\n", USHRT_MAX, 0);//%hu也是可以
}
%hd只能解析SHRT_MAX与SHRT_MIN中的值,越界会出错,%hu同理
#include<stdio.h>
#include<limits.h>
int main()
{
printf("%hd,%hd\n", SHRT_MAX+1, SHRT_MIN-1);
printf("%hu,%hu\n", USHRT_MAX+1, 0-1);
}
C语言中规则short<int<long
int
#include<stdio.h>
#include<limits.h>
int main()
{
//4个字节,有一个符号位,0为正,1为负
printf("max=%d,min=%d\n", INT_MAX, INT_MIN);
//无符号
printf("max=%u,min=%d\n", UINT_MAX, 0);
//max=-2147483648,min=2147483647
printf("max=%d,min=%d\n", INT_MAX+1, INT_MIN-1);
}
long
#include<stdio.h>
#include<limits.h>
int main()
{
//4个字节,有一个符号位,0为正,1为负
printf("max=%d,min=%d\n", LONG_MAX, LONG_MIN);
//无符号
printf("max=%u,min=%d\n", ULONG_MAX, 0);
//max=-2147483648,min=2147483647
printf("max=%d,min=%d\n", LONG_MAX +1, LONG_MIN -1);
}
#include<stdio.h>
#include<limits.h>
int main()
{
//4个字节,有一个符号位,0为正,1为负
printf("max=%d,min=%d\n", LONG_MAX, LONG_MIN);
//无符号
printf("max=%u,min=%d\n", ULONG_MAX, 0);
//max=-2147483648,min=2147483647
printf("max=%d,min=%d\n", LONG_MAX +1, LONG_MIN -1);
}
16位系统:long是4字节,int是2字节
32位系统:long是4字节,int是4字节
64位系统:long是4字节,int是4字节
long long
#include<stdio.h>
#include<limits.h>
int main()
{
printf("LLSize=%d\n", sizeof(long long));
//8个字节,有一个符号位,0为正,1为负
//max=9223372036854775807,min=-9223372036854775808
printf("max=%lld,min=%lld\n", LLONG_MAX, LLONG_MIN);
//无符号
printf("max=%llu,min=%d\n",ULLONG_MAX,0);
//max=-9223372036854775808,min=9223372036854775807
printf("max=%lld,min=%lld\n", LLONG_MAX +1, LLONG_MIN -1);
}
编译long long需要支持C99标准的编译器才行
long long 的级别高于 long ,long 的级别高于 int ,int 的级别高于 short ,short 的级别高于 char 。
5.c格式符
输出一个字符,输出数据可以是单个字符或是一个范围在0到255之间的整数
#include<stdio.h>
#include<limits.h>
int main()
{
char x = 'a';
int i = 97;
//以下都是输出a,97
printf("%c,%d\n", x, x);
printf("%c,%d", i, i);
}
输出hello
int main()
{
printf("%c%c%c%c%c\n", 'h', 'e', 'l', 'l', 'o');
printf("%c%c%c%c%c", 104, 101, 108, 108, 111);
}
限定宽度
#include<stdio.h>
#include<limits.h>
int main()
{
printf("%3c%3c%3c%3c%3c", 'h', 'e', 'l', 'l', 'o');
}
6.s格式符
- %s
- %ms输出字符串占m列,如果字符串本身长度超过m,则可以超过m列,全数输出;如果字符串小于m,则左补空格。
- %-ms输出字符串占m列,如果字符串小于m,则字符串靠左,右左补空格。
- %m.ns输出占m列,但只取字符串中的左端n个字符,这n个字符输入输出在m列的右则,左则补空格。
- -%m.ns。n个字符输出在m列的左侧,右侧补空格。
int main()
{
printf("%s\n", "hello world");
printf("%s %s", "hello", "world");
}
%s多种宽度
int main()
{
// hello world
printf("%30s\n", "hello world");
//如果给的宽度10小于实际输出字符串宽,直接按实际输出
printf("%10s\n", "hello world");
printf("%-50s\n", "hello world");//左对齐
//输出字符串前n个字符,右对齐,总长度15
printf("%15.5s\n", "hello world");// hello
char str[] = "hello world";
printf("\n%s", str);
}
7.f格式符
%f 整数部分全部输出,小数部分输出6位
%m.nf 输出数据共点m列,小数占n位,右对齐
%-m.nf 输出数据共m列,小数占n位,左对齐
#include<stdio.h>
#include<limits.h>
int main()
{
float f1;
f1 = 1.2345f;
float f2 = 100;
printf("%f,%f\n", f1,f2);//保留小数点后6位
printf("%15f,%2f\n", f1, f2);//如果小于限定宽度,按实际,否则补空格
printf("%-15f,%2f\n", f1, f2);//-右边补空格
printf("%-15.2f,%2.1f\n", f1, f2);//-右边补空格,小数点后2位
printf("%015f\n", f1);//左补0
}
%e格式符
输出数据共13位,其中整数部分为1非零数字,小数点占1位,小数部分为6位,指数部分e占1位,指数符号占1位,指数为3位,若输出数据为负数,还应增加一位整数部份的符号位。
int main()
{
printf("%e", 12.3);
//1.230000e+01
}
#include<stdio.h>
#include<limits.h>
int main()
{
printf("%15e\n", 12.3456);//限定宽度,补空格
//1.230000e+01
double d1 = 10000.1234;
printf("%.10e\n", d1);//1.0000123400e+04,小数点后10位
printf("%20e%", d1);//限定20宽度,小于时左边补空格
}
%g格式符
根据数值大小,自动选择f格式或e格式输出实数。
%g用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的0。即%g是根据结果自动选择科学记数法还是一般的小数记数法,在指数小于-4或者大于等于精度时使用%E格式
#include<stdio.h>
#include<limits.h>
int main()
{
float f1 = 1.234;
//1.234567,1.234567e+00,1.23457
printf("%f,%e,%g\n", f1, f1, f1);
printf("%g\n", 0.00001234);
printf("%g\n", 0.0001234);
printf("%.2g\n", 123.45);
printf("%.2g\n", 23.45);
double d1 = 10.0;
printf("%g", d1);
}
8.printf详细说明
- 格式字符中,除了X、E、G,C外,其他均用小写字母,如“%d”不能写成“%D”。
- 不同类型的数据应使用相应类型的格式字符说明其输出形式。
- 如需输出双引号,应在“格式控制”中表示为转义字符的形式并用单引号引起来,即“\””。
- 如需输出字符“%”,在“格式控制”中用连续两个“%”即可。如:printf(“%d%%”,s);
- 当“格式控制”中格式符个数少于输出表中的输出项时,多余的输出项不予输出。
- 当“格式符”多于输出项时,结果为不定值。
- 格式化大小写问题
%d带符号的十进制形式输出整数
printf("%d,%D", 20, 20);//20,D
%o无符号八进制输出整数
printf("%o,%O", 10, 10);//12,O
%x 无符号十六进制输出整数
printf("%x,%X", 14, 14);//e,E
u%以十进制形式输出无符号整数
printf("%u,%U", 14, 14);//14,U
%c以字符输出
printf("%c,%C", 'D', 'D');//D, D
%s 输出字符串
printf("%s,%S", "Hello","Hello");//Hello,
%f 以小数点输出
printf("%f,%F", 1.0,2.0);//1.000000,2.000000
这个在VS的C编译器下可以正常输出,在gcc下结果不同
%e 指数输出
printf("%e,%E", 1.0,1.0);//1.000000e+00,1.000000E+00
%g 使用输出宽度较小的格式输出
printf("%g,%G", 1.0, 2.0);//1,2
printf格式一定要匹配
int main()
{
int x = 1;
printf("%d,%f", x,x);//f%输出在0.000000,输出格式一定要匹配
getchar();
}
从左向右开始解析
int main()
{
int x = 11;
printf("%%d", x);//从左向右开始解析,%%解析成%了。
getchar();
}
*与格式符
int main()
{
int x = 10;
//数字是限定字符宽度
printf("%d\n", x);
printf("%4d\n", x);
printf("%8d\n", x);
printf("%16d\n", x);
}
int main()
{
for (int i = 1; i < 10; i++)
{
printf("%*d\n", i, i);//*不是替换i的
}
}
int main()
{
for (int i = 1; i < 10; i++)
{
printf("%*.*f\n", 2 * i, i, 1.23);//2*i表示宽度,i是小数点位数
}
}
%d中间加空格
int main()
{
printf("%d,%d", 99, -99);
printf("\n");
printf("% d,% d", 99, -99);//正数多一个空格,负数没有变化
}
号控制符
int main() {
printf("%o,%#o\n", 8, 8);//#在八进制时自动补0
printf("%x,%#x\n", 20, 20);//补0x
printf("%x,%#X", 20, 20);//补0X
return 0;
}
可以确保小数点显示
int main() {
printf("%.0f,%f\n", 1.23, 1.23);
//补了#号后,小数点会保留
printf("%#.0f,%f\n", 1.23, 1.23);//这里输出会1.,1.230000
printf("%#.0e,%e\n", 1.23, 1.23);//1.e+00,1.230000e+00
printf("%#.0g,%g\n", 1.23, 1.23);//1.,1.23
return 0;
}
%a是以指数形式输出一个浮点数
1.%a浮点数,十六进制数字和p-记数法(C99)%A浮点数,十六进制数字和p-记法(C99)。
int main() {
//0x1p+4,0x1.4e3d70a3d70a4p+4,1p+4->2的4次方
printf("%.0a,%a\n", 20.89, 20.89);
printf("%.0a,%a\n", 1.23, 1.23);
printf("%.0a,%a\n", 4.23, 4.23);
return 0;
}
printf类型匹配
int main() {
int age = 9;
float weight = 69.9;
//今年9岁,体重69.900002公斤!
printf("今年%d岁,体重%f公斤!\n",age, weight);
//如果写反,今年-1610612736岁,体重0.000000公斤!
printf("今年%d岁,体重%f公斤!\n", weight, age);
//这里可以确定提是%d是按整数截取解析,%f按小数
printf("%p,%p", &age, &weight);//这里在内存中查看显示结果不同
getchar();
}
int main() {
printf("%d,%f", 10.1, 10.8);//在x64下,第一个匹配出错,第二个正确,x86下只要一个匹配出错,都出错
}
注意:x86与x64下有区别
int main() {
printf("%d\n", INT_MAX);
printf("%d\n", INT_MAX+1);
return 0;
}
这个是越界出不正确值
输出+数,在% 后输入一个+号
int main() {
printf("%d,%d\n", 10, -20);
printf("%+d,%+d\n", 10, -20);
return 0;
}
int main() {
printf("%.2f,%.2f\n", 1.23, -20.45);
//+1.23,-20.45
printf("%+.2f,%+.2f\n", 1.23, -20.45);
return 0;
}
热门文章
祝孩子六一儿童节快乐的短句|最美时光是童年,欢乐照亮了世界
一花一笑一祝福,欢度六一儿童节;最美时光是童年,欢乐照亮了世界。童年欢歌笑语,健康活泼可爱;德智体美发展,世界因你精彩。用童心看世界,快乐总是一片片的;用童趣过日子,欢喜总是一件件的;用童真待人,愉悦总是一堆堆的。六一儿童节快乐,无论年龄多大,愿你在“六一儿童
菖蒲怎么养护
石菖蒲,有名的药材,对人的消化系统和中枢神经都有十分重要的作用,因此受到大家的喜爱。它原本生长在较为湿润处,那么想要家养的话我们该怎么做呢?其实很简单,将它放置在无强光处,保证冬季室温不低于4℃,常年保持盆土湿润,生长期间一月两次施肥,每年春天换盆并且采用分株法进行繁殖。一、光照在石菖蒲的养护过程中
最新文章
凉薯怎么吃最好吃(凉薯怎么吃?)
凉薯,在你们那里它叫什么呢?在广西大多都是叫凉薯,但也有部分地方叫它“沙葛”;广东部分地方还叫它“番葛”;在云南、贵州等地被称为“地瓜”。夏天到了,天气热得让我想每天抱着一个凉薯啃,消暑止渴、清甜爽脆。没错,凉薯我喜欢生吃。很多人对凉薯是有争议的:它是水果还是蔬菜呢?我特地问过我老婆,她也是剥开皮直
加湿器调多少度
加湿器的合适湿度设置 取决于多种因素,包括个人偏好、室内环境、季节以及加湿器的类型。以下是一些建议:一般适宜湿度40%-60%:这是一个广泛推荐的湿度范围,既能避免细菌和霉菌的滋生,又能保持人体的舒适度。根据季节调整冬季:由于暖气会使空气更加干燥,建议将湿度设置在40%左右,以保持空气湿润并避免静电