格式化输入及输出总结
2012-04-29 09:52
211 查看
首先我来介绍以下格式化输出printf及其他相关的输出函数(这个比较简单故此先行介绍了)
printf函数一般在输出格式format的控制下,将其参数进行转换与格式化,并在标准的输出设备上打印出来,他的返回值是打印的字符数。
这里稍微提一下格式字符串有两种类型:普通类型及转换说明--------参数类型如果是void×类型时,他的转换类型是p他的输出形式是以指针输出的,例如:
其结果是:
从上面的结果可以看到:
上面warning解释下:初始化是把一个指针类型的对象赋给一个整形变量,而且也没有进行强制类型转换,所以这样编译器给你一个警告,让你小心检查时不是写错了
再看一段代码:
想必这是大家常犯的一个错误把,再次解释下,我这指针并未给他分配空间,我如果这样些:
此时运行的结果是:
这可以充分说明我前面代码并未分配空间给指针,故出现断错误
在这里补充一下:
断错误绝大部分是由于指针引起的,一般是指针指向了非法空间,对指针没有分配空间就是用,要么就是没有初始化就使用。
现在再介绍另外两种输出方式:一种是sprintf(流输出)另一种是fprintf(文件输出)。
sprintf输出,他与printf不同的是:他将输出保存到一个字符串中,当然拉字符串要有足够的空间存储他的。
至于fprintf的话一般是保存在文件中,在其就不多说了(原因是用的很少的)。
现在开始讲输出的语句了(再次提醒以下scanf语句是相当的严格的)
scanf函数扫描完其格式串,或者碰到某些输入无法与格式控制说明匹配的情况下,该函数就会中止。(这就是严格的原因)
若是成功匹配的话,他将赋值的输入项的个数作为函数的返回值,如果到达文件的结尾,该函数就会返回EOF,现在再介绍一种代码两种输入方式说明这个问题:
输入及其结果:
这说明什么。第一个正常输出了,而第二个并未输出,原因是输入有问题的,我把a定义成int型的而把c定义成char的型的,故我们输出第一个应该是整形的,我输如的是a,scanf函数读取时,他发现不对,然后终止了,返回0个匹配的值了,而后面的他都将忽略掉了
现在再讲讲sscanf把,他用于从一个字符串(而不是标准输入)中读取字符序列,他按照格式参数format中的规定的格式扫描字符串string,并把结果分别保存到那些参数当中,注意这些参数必须是指针。
另外一个就是fscanf了就是输入文件了。(在此就不多介绍了)
以上是个人的一些见解,希望读者看了能贡献以下其中的不足之处。
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了就是输入文件了。(在此就不多介绍了)
以上是个人的一些见解,希望读者看了能贡献以下其中的不足之处。
相关文章推荐
- ACM的输入输出总结
- C和C++格式化输入输出
- c primer plus第13章总结:文件输入/输出
- 【C语言基础】-02字符串和格式化输入/输出
- 输入输出总结
- 【总结】输入输出技巧
- c/c++中输入/输出总结
- c++格式化输入输出
- 《C语言程序设计现代方法》第3章 格式化输入/输出
- 字符串的格式化输入与输出
- java 输入输出 格式化 本地文件的读取
- python中的格式化输出用法总结
- printf函数格式化输出使用总结
- C语言程序设计-现代方法----示例及练习题----第三章--格式化输入输出
- C Primer Plus 5th 翻译 第四章:字符串和格式化输入/输出(二)
- 格式转换说明符scanf,printf格式%大全/格式化输入输出
- c++格式化输入输出
- golang中的格式化输入输出
- 关于字符串和格式化输入输出的学习
- 格式化输入输出