格式化输入及输出总结

    首先我来介绍以下格式化输出printf及其他相关的输出函数(这个比较简单故此先行介绍了)

    printf函数一般在输出格式format的控制下,将其参数进行转换与格式化,并在标准的输出设备上打印出来,他的返回值是打印的字符数。

  这里稍微提一下格式字符串有两种类型:普通类型及转换说明--------参数类型如果是void×类型时,他的转换类型是p他的输出形式是以指针输出的,例如:

  

#include <stdio.h>
main(){
  void *p = 5;
  int *c = 6;
  printf("the result is:\n");
printf("%p,%p",p,c);
}

其结果是:

the result is:
0x5,0x6

example.c: In function ‘main’:
example.c:3: warning: initialization makes pointer from integer without a cast
example.c:4: warning: initialization makes pointer from integer without a cast

从上面的结果可以看到:

上面warning解释下:初始化是把一个指针类型的对象赋给一个整形变量,而且也没有进行强制类型转换,所以这样编译器给你一个警告,让你小心检查时不是写错了

再看一段代码:

#include <stdio.h>
main(){
  int *c; 
  *c = 6;
  printf("the result is:\n");
printf("%p",c);
}
此时结果是segmentation fault

想必这是大家常犯的一个错误把,再次解释下,我这指针并未给他分配空间,我如果这样些:

#include <stdio.h>
#include <stdlib.h>
main(){
  int *c; 
  c = malloc(sizeof(10));
  *c = 6;
  printf("the result is:\n");
printf("%p",c);
}

此时运行的结果是:

the result is:
0x1f69010

这可以充分说明我前面代码并未分配空间给指针,故出现断错误

在这里补充一下:

断错误绝大部分是由于指针引起的,一般是指针指向了非法空间,对指针没有分配空间就是用,要么就是没有初始化就使用。


现在再介绍另外两种输出方式:一种是sprintf(流输出)另一种是fprintf(文件输出)。

sprintf输出,他与printf不同的是:他将输出保存到一个字符串中,当然拉字符串要有足够的空间存储他的。

至于fprintf的话一般是保存在文件中,在其就不多说了(原因是用的很少的)。


现在开始讲输出的语句了(再次提醒以下scanf语句是相当的严格的)

scanf函数扫描完其格式串,或者碰到某些输入无法与格式控制说明匹配的情况下,该函数就会中止。(这就是严格的原因)

若是成功匹配的话,他将赋值的输入项的个数作为函数的返回值,如果到达文件的结尾,该函数就会返回EOF,现在再介绍一种代码两种输入方式说明这个问题:

#include <stdio.h>
main(){
  int a;
  char c;
  scanf("%d,%c",&a,&c);
  printf("the result is:\n");
printf("%d,%c",a,c);
}

输入及其结果:

5,a
the result is:
5,a

a,5
the result is:
0,

这说明什么。第一个正常输出了,而第二个并未输出,原因是输入有问题的,我把a定义成int型的而把c定义成char的型的,故我们输出第一个应该是整形的,我输如的是a,scanf函数读取时,他发现不对,然后终止了,返回0个匹配的值了,而后面的他都将忽略掉了

现在再讲讲sscanf把,他用于从一个字符串(而不是标准输入)中读取字符序列,他按照格式参数format中的规定的格式扫描字符串string,并把结果分别保存到那些参数当中,注意这些参数必须是指针。

另外一个就是fscanf了就是输入文件了。(在此就不多介绍了)

 以上是个人的一些见解,希望读者看了能贡献以下其中的不足之处。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值