2017-04-02 62 views
0

CODE#1:C编程中的文件处理:下面两个代码有什么区别?

#include<stdio.h> 
void main() 
{ 
    FILE *fp; 
    char ch; 
    fp=fopen("1.txt","r"); 
    while((ch=fgetc(fp))!=EOF) 
    { 
     printf("%c",ch); 
    } 
    fclose(fp); 

} 

代码#2:

#include<stdio.h> 
void main() 
{ 
    FILE *fp; 
    int ch; 
    fp=fopen("1.txt","r"); 
    while((ch=fgetc(fp))!=EOF) 
    { 
     printf("%c",ch); 
    } 
    fclose(fp); 

} 

在这里,在CODE#1变量CH为下的字符数据类型中声明的,而在 CODE#2它下整数数据类型中声明,我的问题是两个代码的输出如何相同?我们如何比较字符(存储在代码#1中的ch变量中)与整数值(由EOF返回)?如何将整数值存储在ch变量(整数数据类型)中并打印在CODE#2中?

+3

现在有了一个包含字符十六进制'0xFF'文件运行这个程序,突然两个代码的输出是不一样的。 –

+0

保存与0xFF 1.txt文件,然后通过使用上面的代码#1和代码#2我得到相同的输出。请你详细说明你的答案吗? – Vinu

回答

2

CODE#1显然是错误的,它是由程序员做一个常见的错误。 fgetc精确返回一个int值,以便可以将该值与EOF进行比较。

EOF扩展到一个整数恒定值,它是依赖于实现的负值,但是,最常用的将是-1。所以,当fgetc的返回值被赋值给char时,它被截断为255,这是一个有效的char值。这就是为什么fgetc具有返回类型int并且从fgetc返回的值永远不应该指定给char的原因。

如何才能整数存储在(的整数数据类型)CH变量值和CODE#2印刷?

龟etc的手册页明确指出

龟etc()从流中读取下一个字符,并返回它为unsigned char转换为int,或EOF上的文件或错误的结束。

因此,其类型转换为char印刷很精致,只要返回值不是EOF。

+0

在CODE#2中,ch变量(在整型数据类型下声明)如何从1.txt文件中的fgetc函数获取字符并使用%c来打印? – Vinu

相关问题