C语言程序设计知识点总结专题二:数据的输入输出函数(printf+scanf)

Printf

1.格式控制符

格式说明

表示内容

格式说明

表示内容

%d

带符号的十进制整数(整型   int)

%c

单个字符  char

%ld

长整型 long int

%s

字符串

%f

浮点型 float

%o

八进制

%lf

双精度浮点型double

%#o

带前导的八进制

%%

输出一个百分号

%x

十六进制(小写字母)

%5d

指定输出字段的最小宽度:5  ,不足5位则左侧补0

%#x

带前导的十六进制

%u:

输出无符号的十进制整数

%X

输出十六进制整数(大写字母)

%e 或 %E

  1. 输出科学记数法形式的浮点数。

示例:

double dnum = 3.14159;

printf("%e", dnum);

// 输出 3.141590e+00

printf("%E", dnum);

// 输出 3.141590E+00

%g 或 %G

根据情况选择 %f 或 %e 形式输出

%p

输出指针的值(地址)

%%

输出 % 符号本身

示例

1. int x=017;   一定要弄清楚为什么是这个结果!过程很重要

printf(“%d”, x); 15

printf(“%o”, x); 17

printf(“%#o”,x); 017

printf(“%x”, x); 11

printf(“%#x”,x); 0x11

2.printf(“a=%d,\n b=%d”,12, 34)那么输出的结果就是:a=12, b=34

3. 注意这种题型

int x=12,y=34; 
char z=‘a’;
printf(“%d ”,x,y);// 一个格式说明,两个输出变量,后面的 y 不输出
printf(“%c”,z);    //   结果为:12a

2.控制输出格式

除了基本的格式说明符外,还可以使用其他修饰符来控制输出的格式:

(1)宽度:

使用数字指定输出字段的最小宽度。

示例:

int num = 10;

printf("%5d", num);  // 输出 "   10",前面有3个空格不足5位则左侧补0

(2)精度:

对于浮点数,可以指定小数点后的位数。

示例:

float fnum = 3.14159;

printf("%.2f", fnum);  // 输出 3.14

(3)对齐方式: (不指定对齐方式,默认就是右对齐

使用 - 指定左对齐

示例:

int num = 10;

printf("%-5d", num);  // 输出 "10   ",空格在右边

(4)填充字符:

使用 0 指定使用零填充。

示例:

int num = 10;

printf("%05d", num);  // 输出 "00010"

(5)正负号:

使用 + 强制输出正号。

示例:

int num = 10;

printf("%+d", num);  // 输出 "+10"

6.转义序列

\n 表示换行。

\t 表示水平制表符。

7.举例说明:

printf(“%2d”,123 );  第二部分有三位,大于指定的两位,原样输出 123

printf(“%5d”,123 );  第二部分有三位,小于指定的五位,左边补两个空格  123  printf(“%10f”,1.25 ); 小数要求补足 6 位的,没有六位的补 0,。结果为  1.250000  printf(“%5.3f”,125 ); 小数三位,整个五位,结果为 1.250(小数点算一位)

printf(“%3.1f”,1.25 );小数一位,整个三位,结果为 1.3(要进行四舍五入)

scanf

1.输入格式控制符

(与prinft的表格同,不同的补充如下:)

  • %[...]:读取符合指定字符集的字符串。
  • %n:读取到目前为止输入字符的数量。
  • %*跳过读取的输出。

2.使用规范

1.、scanf(“ a=%d,b=%d”,&a,&b)

注意:在黑色屏幕上面输入的为  a=12,b=34 才可以把 12  34 正确给 a  b

2、scanf(“%d,%d”,&x,&y);scanf 的第二个部分一定要是地址!

3、特别注意指针在 scanf 的考察 例如: int x=2;int *p=&x;

scanf(“%d ”,x);   错误          scanf(“%d”,p);正确

scanf(“%d”,&p);  错误         scanf(“%d”,*p)错误

4、指定输入的长度

终端输入:1234567

scanf(“%2d%4d%d”,&x,&y,&z);x  12,y  3456,z  7

终端输入:1 234567     由于 1  2 中间有空格,所以只有 1 位给 x

scanf(“%2d%4d%d”,&x,&y,&z);x  1,y  2345,z  67

5、字符和整型是近亲:

int x=97;

printf(“%d”,x);   结果为 97

printf(“%c”,x);   结果为 a

6、输入时候字符和整数的区别

scanf(“%d”,&x);这个时候输入 1,特别注意表示的是整数 1

scanf(“%c”,&x);这个时候输入 1,特别注意表示的是字符‘1 ’ASCII 为整数 49 补充说明:

1)scanf 函数的格式考察:

        注意该函数的第二个部分是&a 这样的地址,不是 a

        scanf(“%d%d%*d%d ”,&a,&b,&c); 跳过输入的第三个数据。

2)putchar ,getchar 函数的考查:

        char  a = getchar() 是没有参数的,从键盘得到你输入的一个字符给变量 a。

        putchar(‘y ’)把字符 y 输出到屏幕中。

3)如何实现两个变量 x ,y 中数值的互换: t=x;x=y;y=t

7、输入数据规范:

scanf("%d%d",&a,&b);                //(两个%d之间空格)输入a和b的值时用空格隔开

scanf("%d %d",&a,&b);               //(两个%d之间空格)输入a和b的值时用空格隔开

scanf("%d,%d",&c,&d);               //输入c和d的值时用逗号(,)隔开

按下回车表示数据输入完成,继续运行程序

3. 注意事项

1. 默认情况下,scanf 会忽略任何空白字符(包括空格、制表符和换行符),除非格式串中有明确指定。

假设我们需要读取一系列由空格分隔的整数和浮点数,但是我们希望 scanf 不忽略空格,而是将其作为输入的一部分读取。

1#include <stdio.h>
2
3int main() {
4    int num;
5    float value;
6
7    printf("Enter an integer followed by a space and then a floating point number: ");
8    if (scanf("%d %f", &num, &value) == 2) {
9        printf("You entered: %d and %.2f\n", num, value);
10    } else {
11        printf("Invalid input.\n");
12    }
13
14    return 0;
15}

//在这个例子中,scanf 会读取一个整数和一个浮点数,其中的空格会被忽略。

2. 如果需要读取包含空格的字符串,可以使用 %[^\n] 来读取直到遇到换行符为止。

如果我们想要读取一行文本,即使这行文本中包含了空格,我们可以使用 %[^\n]

1#include <stdio.h>
2
3int main() {
4    char str[100];
5
6    printf("Enter a line of text: ");
7    if (scanf("%[^\n]", str) != EOF) {
8        printf("You entered: %s\n", str);
9    } else {
10        printf("Invalid input.\n");
11    }
12
13    return 0;
14}

//这里 %[^\n] 会读取直到换行符之前的所有字符。

3. 使用 * 忽略某些输入,例如 scanf("%*[^]] %d", &num) 可以忽略方括号内的内容。

假设我们需要读取一行文本,其中包含了一些不需要的信息,这些信息放在方括号内,我们只关心方括号后面的一个整数。

1#include <stdio.h>
2
3int main() {
4    int num;
5
6    printf("Enter a line with [some info] and then a number: ");
7    if (scanf("%*[^]] %d", &num) == 1) {
8        printf("You entered: %d\n", num);
9    } else {
10        printf("Invalid input.\n");
11    }
12
13    return 0;
14}

//这里 %*[^]] 会读取直到方括号 ] 之前的字符,并忽略它们,接着读取一个整数。

4. 使用 getchar() 清除输入缓冲区中的多余字符,避免下一次 scanf 调用时出现问题。

如果用户输入了多余的信息,例如在输入整数后多按了一个回车键,这会导致下一次 scanf 调用时出现问题。我们可以使用 getchar() 来清除缓冲区中的多余字符。

1#include <stdio.h>
2
3int main() {
4    int num;
5
6    printf("Enter an integer: ");
7    if (scanf("%d", &num) == 1) {
8        printf("You entered: %d\n", num);
9        // 清除缓冲区中的多余字符
10        while (getchar() != '\n') ;
11    } else {
12        printf("Invalid input.\n");
13    }
14
15    return 0;
16}

//这里 while (getchar() != '\n') ; 会读取直到遇到换行符为止的所有字符,从而清空输入缓冲区。

字符的输入输出

  • putchar( c )

1.功能
  • putchar 用于输出一个字符到标准输出流(通常是屏幕)。
  • 返回值是输出的字符。
2.注意事项
  1. 类型转换:
    • 如果传递给 putchar 的不是字符类型,会自动进行类型转换。
  2. 输出缓冲:
    • 输出可能受到缓冲的影响,也就是说,字符可能不会立即显示在屏幕上,除非缓冲区满了或遇到了换行符。
  3. 错误处理:
    • 如果输出失败,putchar 返回 EOF
  • getchar( c )        // 读取一个字符,包括空格和制表符。

1.功能
  • getchar 用于从标准输入流(通常是键盘)读取一个字符。
  • 返回值是读取的字符。
2.注意事项
  1. 读取一个字符:
    • getchar 读取一个字符,包括空格和制表符。
  2. 读取多个字符:
    • 如果连续调用 getchar,它将继续读取后续的字符,直到遇到文件结束标志(EOF)。
  3. 文件结束标志(EOF):
    • 当达到文件结束(EOF)时,getchar 返回 EOF
  4. 缓冲区问题:
    • getchar 读取的字符可能会被缓存在输入缓冲区中。
  5. 错误处理:
    • 如果发生错误,getchar 返回 EOF

使用示例:

#include <stdio.h>

int main() {
    char ch;

    // 输出字符 'A'
    putchar('A');

    // 从标准输入读取一个字符
    ch = getchar();
    printf("You entered: %c\n", ch);

    // 再次读取一个字符
    ch = getchar();
    printf("Next character: %c\n", ch);

    return 0;
}

  • 16
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值