您的位置:首页 > 其它

格式化输入及输出总结

2012-04-29 09:52 211 查看
首先我来介绍以下格式化输出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了就是输入文件了。(在此就不多介绍了)

以上是个人的一些见解,希望读者看了能贡献以下其中的不足之处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: