scanf()和gets()及printf()和puts()

本文详细介绍了C语言中常用的输入输出函数,包括scanf()与gets()的区别,以及printf()和puts()的不同之处。通过示例代码展示了这些函数如何处理字符串及各种数据类型的输入输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、scanf()和gets()

1.scanf()

所在头文件:stdio.h

语法:scanf(“格式控制字符串”,变量地址列表);

接受字符串时:scanf(“%s”,字符数组名或指针);

2.gets()

所在头文件:stdio.h

语法:gets(字符数组名或指针);

两者在接受字符串时:

1.不同点:

scanf不能接受空格、制表符Tab、回车等;

而gets能够接受空格、制表符Tab和回车等;

scanf :当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中。

gets:可接受回车键之前输入的所有字符,并用’\0’替代 ‘\n’.回车键不会留在输入缓冲区中

#include<stdio.h>

int main()
{
    char a[10];

    scanf("%s",a);

    printf("%s\n",a);


    return 0;
}



   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

从键盘输入字符串 asd df时,遇到空格,scanf()就认为输入结束了,所以a中存放的字符串是 ‘asd\0’。

#include<stdio.h>

int main()
{
    char a[10];

    gets(a);

    printf("%s\n",a);


    return 0;
}



   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

从键盘输入字符串 asd df时,gets()遇到’\n’才认为是结束输入了,所以a中存放的是’asd df\0’。

#include<stdio.h>

int main()
{
    char a[10],b[10];
    char c,d;
    scanf("%s",a);
    printf("a中保存的字符串为:%s\n",a);

    c=getchar();
    printf("c中保存的字符为:%c ",c);

    gets(b);
    printf("b中保存的字符串为:%s\n",b);

    d=getchar();
    printf("d中保存的字符为:%c",d);

    return 0;
}
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

输入asdf回车,因为scanf会将回车保留在缓冲区中,所以回车会紧接着被c取得而不需要再额外输入,所以a中存储的是’asdf\0’,字符c=’\n’。结果如下: 
这里写图片描述

接着输入as df回车,因为gets会将’\n’替换成’\0’,所以b字符串中保留的是’as df\0’,并且还是要继续输入d的值: 
这里写图片描述

最后输入d的值: 
这里写图片描述

二、printf()和puts()的区别

转载自网络

相同点: 
两者都属于stdio.h这个头文件 
都能输出字符串

不同点: 
puts()在输出字符串时会将’\0’自动转换成’\n’进行输出,也就是说,puts方法输出完字符串后会自动换行。

puts的功能更单一,只能输出字符串,而printf可以根据给定的格式输出多种类型的数据。

  1、puts()函数用来向标准输出设备(屏幕)写字符串并换行,其调用方式为,puts(s);其中s为字符串字符(字符串数组名或字符串指针)。

1
2
3
4
5
6
7
#include <stdio.h>
int  main()
{
     char  string[] =  "This is an example output string\n" ;
     puts (string);
     return  0;
}

  2、printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。

  printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。

  格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

  示例:通过printf函数输出字符串、有符号整数、单精度浮点数双精度浮点数

1
2
3
4
5
6
#include<stdio.h>
int  main()
{
printf ( "%s\t%d%\t%f\t%e\n" "hello world" , 1, 1.1f , 1.1);   
return  0;
}

  3、printf控制字符的格式:

  ① d格式:用来输出十进制整数。有以下几种用法:

  %d:按整型数据十进制的实际长度输出。

  %md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。

  %ld:输出长整型数据。

  ② o格式:以无符号八进制形式输出整数。

  %d:按整型数据八进制的实际长度输出。

  %lo:对长整型可以用格式输出

  %mo:指定字段宽度用格式输出

  ③ x格式:以无符号十六进制形式输出整数。

  %x:按整型数据十六进制的实际长度输出。

  %lx:对长整型可以用格式输出

  %mx:指定字段宽度用格式输出

  ④ u格式:以无符号十进制形式输出整数。

  %u:按无符号整型数据十进制的实际长度输出。

  %lu:对长整型可以用格式输出

  %mu:指定字段宽度用格式输出

  ⑤ c格式:输出一个字符。

  ⑥ s格式:用来输出一个串。有几中用法

  %s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。

  %ms:输出的字符串占m列,如字符串长度大于m,将字符串全部输出。若串长小于m,则左补空格。

  %-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。

  %m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。

  %-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。

  ⑦ f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:

  %f:不指定宽度,整数部分全部输出并输出6位小数。

  %m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。

  %-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。

  ⑧ e格式:以指数形式输出实数。可用以下形式:

  %e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。

  %m.ne和%-m.ne:m、n和”-”字符含义与前相同。

  此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。

  ⑨ p格式:输出指针地址



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值