看文百科 手机版

当前位置: 首页 > 常识 >

c语言中getchar的用法详解(C语言-数据如何输入与输出)

100次浏览     发布时间:2024-11-15 10:08:06    

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格式符

  1. %s
  2. %ms输出字符串占m列,如果字符串本身长度超过m,则可以超过m列,全数输出;如果字符串小于m,则左补空格。
  3. %-ms输出字符串占m列,如果字符串小于m,则字符串靠左,右左补空格。
  4. %m.ns输出占m列,但只取字符串中的左端n个字符,这n个字符输入输出在m列的右则,左则补空格。
  5. -%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详细说明

  1. 格式字符中,除了X、E、G,C外,其他均用小写字母,如“%d”不能写成“%D”。
  2. 不同类型的数据应使用相应类型的格式字符说明其输出形式。
  3. 如需输出双引号,应在“格式控制”中表示为转义字符的形式并用单引号引起来,即“\””。
  4. 如需输出字符“%”,在“格式控制”中用连续两个“%”即可。如:printf(“%d%%”,s);
  5. 当“格式控制”中格式符个数少于输出表中的输出项时,多余的输出项不予输出。
  6. 当“格式符”多于输出项时,结果为不定值。
  7. 格式化大小写问题

%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+41p+4->24次方
  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%左右,以保持空气湿润并避免静电