C语言入门07——输入函数&输出函数

C语言无I/O语句,I/O操作由函数实现。

1.putchar(c)字符输出函数

格式: putchar( c );

参数: c为字符常量、变量或表达式

功能:把字符c输出到显示器上

返值:正常,为显示的 c 代码值;

2.printf格式输出函数

格式:printf(“格式控制串”,输出表)

功能:按指定格式向显示器输出数据

输出表:要输出的数据

格式控制串:包含两种信息

格式说明:%[修饰符]格式字符,用于指定输出格式

普通字符:原样输出

2.1格式符

格式符作用
i/d十进制整数
x/X十六进制无符号整数
o八进制无符号整数
u无符号十进制整数
c单一字符
s字符串
e/E指数形式浮点数
f小数形式浮点小数
ge和f较短的一种
%%百分号本身
int a=567;printf ( “%d”,a);    //567
int a=255;printf(“%x”,a);     //ff
int a=65;printf(“%o”,a);     //101
int a=567;printf(“%u”,a);     //567
char a=65;printf(“%c”,a);    //A
printf(“%s”,“ABC”);         //ABC
float a=567.789;printf(“%e”,a);    //5.677890e+02
float a=567.789;printf(“%f”,a);    // 567.789000
float a=567.789;printf(“%g”,a);    // 567.789
printf(“%%”);            //%




int n = printf("HELLO world!");//printf的返回值是字符串的个数(会
加上\n),如果遇到错误的时候返回负数
printf("\n%d\n",n); //这里可以在前面加上\n,也能达到换行
n = 12

2.2特殊功能格式符

修饰符功能
m输出数据所占空间,数据长度<m,左边补空格,大于则按实际要求输出
.n对实数,指定小数位数,对字符串,指定实际输出的位数
-数据左对齐输出(缺省就是右对齐输出)
+指定有符号数的正数前加+
0输出数值时指定左边不使用空格,使用0填充
#在八进制和十六进制前显示前导0,0x
l在d,o,x,u前,指定输出的精度为long型
l在e,f,g前,指定输出的精度为double型
例  static char a[]=“Hello,world!”
printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);
运行结果:Hello,world!
           Hello,world!
               Hello
          Hello
          Hel 

2.3 %.*s 是 printf 格式化字符串的一种格式,它允许你指定一个字段宽度,并且该字段宽度是由一个整数参数指定的,而不是一个固定的数字。

具体来说:

  • %.*s 中的 % 表示这是一个格式化字符串的开始。
  • * 表示字段宽度是通过后面的参数指定的,而不是直接写在格式化字符串中。
  • s 表示参数是一个字符串。

因此,%.*s 这个格式化字符串需要两个参数:

  1. 第一个参数是一个整数,用于指定字段宽度。
  2. 第二个参数是一个字符串,它是要打印的字符串。

例如,在下面的示例中,我们打印了一个长度为3的子字符串:

#include <stdio.h>

int main() {
    char str[] = "Hello, World!";
    printf("%.*s\n", 3, str); // 打印 "Hel"
    return 0;
}

在这个示例中,%.*s 表示我们打印一个长度为3的子字符串,并且字符串是由参数 str 提供的。

#include <stdio.h>
#include <string.h>

int main() {
    char arr[20] = "acdfg";
    printf("%.*s\n", (int)(arr + 2 - arr), arr);

    return 0;
}

这样输出的结果就是数组 arr 中第三个元素(下标为2)之前的部分 "ac"。

3.getchar()字符输入函数

字符输入函数getchar

格式: getchar( )

功能:从键盘读一字符

返值:正常,返回读取的代码值;出错或结束键盘输入,返回-1 (ctrl + d)

#include <stdio.h>
int main()
{  int c;
   printf("Enter a character:");
   c=getchar();
   printf("%c--%d->hex%x\n", c, c, c);
}
运行结果:
Enter a character:A
A--65->hex41



char password[20] = {};
scanf("%s",password)  //这里并没有取地址符号,因为数组名本身就是地址

4. scanf格式输入函数

格式: scanf(“格式控制串”,地址表)

功能:按指定格式从键盘读入数据,存入地址表指定

存储单元中,并按回车键结束

返值:正常,返回输入数据个数

地址表:变量的地址,常用取地址运算符&

注:当接收%S时候,如果加了空格,就会结束,如果要加空格,就要用gets()。

4.1格式符

格式符作用
i/d十进制整数
x/X十六进制无符号整数
o八进制无符号整数
u无符号十进制整数
c单一字符
s字符串
e/E指数形式浮点数
f小数形式浮点小数
ge和f较短的一种
%%百分号本身
h用于d,o,x前,指定输入为short型整型
l

用于d,o,x前,指定输入为long型整型

用于e,f前,指定输入为double型数据

m指定输入数据宽度,遇到空格或不可转换的字符结束
*抑制符,指定输入项读入后不复制给变量

scanf(“%4d%2d%2d”,&yy,&mm,&dd);
若输入19991015
则yy为1999, mm为10, dd为15


scanf(“%2d %*3d %2d”,&a,&b);
若输入1234567
则a为12,b为67


用“%c”格式符时,空格和转义字符作为有效字符输入
scanf(“%c%c%c”,&c1,&c2,&c3);
若输入a bc
则c1为a, c2为空格, c3为b


总结,输入数据时,遇以下情况认为该数据结束:
遇空格、TAB、或回车
遇非法输入
遇宽度结束

5.输入函数留下的“垃圾”(多输入的空格回车)

使用输入函数可能会留下垃圾
int x;
char ch;
scanf(“%d”,&x);
scanf(“%c”,&ch);
printf(“x=%d,ch=%d\n”,x,ch);

这里当给x赋值的时候,回车成为垃圾符号。会被附值给ch


方法1:用getchar()清除
 int x;
 char ch;
 scanf(“%d”,&x);
 getchar();
 ch=getchar();
 printf(“x=%d, ch=%d\n”, x, ch);



方法2:用格式串中空格或“%*c”来“吃掉”
int x;
char ch;
scanf(“%d”,&x);
scanf(“  %c”,&ch);或 scanf(“%*c%c”,&ch);


6gets字符串输入函数

字符串输入函数gets

格式: char * gets(char *s)

功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’

说明1:输入串长度应小于字符数组维数

说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志。

int main( )
{     char string[15];
        printf(“Input a string:”);
       gets(string);
        printf(“%s\n”, string);
        return 0;
 }
 
 这里很容易警告
 局部变量在栈上,如果输入的字符号,超过14,很容易栈溢出

7.puts字符串输出函数

字符串输出函数puts

格式:int puts(const char *s)

功能:向显示器输出字符串(输出完,换行)

说明:字符数组必须以‘\0’结束


#include <stdio.h>
int main( )
{     char string[80] = “How are you”;
      puts(string);
      return 0;
 }
输入:  How  are  you?
输出:  How  are  you ?  

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值