文件读写
在我的d盘根目录下有一个BianMa.java文件,文件里面的文本就是程序的源代码。
[程序1:]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
int main()
{
FILE *fp;
char c;
fp = fopen("D:\BianMa.java", "r");
c = fgetc(fp);
while (c != EOF)
{
printf("%c", c);
c = fgetc(fp);
}
fclose(fp);
printf("\n");
system("pause");
return 0;
}
[程序2:]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
int main()
{
FILE *fp;
char c;
fp = fopen("D:\BianMa.java", "r");
while ((c = fgetc(fp))!= EOF)
{
printf("%c", c);
}
fclose(fp);
printf("\n");
system("pause");
return 0;
}
以上都能正确输出文件的文本,但是:
[程序3:]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
int main()
{
FILE *fp;
char c;
fp = fopen("D:\BianMa.java", "r");
c = fgetc(fp);
while (c != EOF)
{
printf("%c", c);
}
fclose(fp);
printf("\n");
system("pause");
return 0;
}
这个程序的话就一直不停的输出'#',为什么呢?
[解决办法]
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#include<Windows.h> int main(){ FILE *fp; char c; fp = fopen("D:\BianMa.java", "r"); c = fgetc(fp); while (c != EOF) { printf("%c", c); c = fgetc(fp); } fclose(fp); printf("\n"); system("pause"); return 0;}
没加入循环,输出的都是第一个字符
[解决办法]
int main()
{
FILE *fp;
char c;
fp = fopen("D:\\BianMa.java", "r");
if (!fp)
{
return 0;
}
while ( (c=fgetc(fp))!=EOF)
{
printf("%c", c);
}
fclose(fp);
printf("\n");
system("pause");
return 0;
}
[解决办法]
fgetc从文件读取一个字符,同时使得访问文件的指针后移一个字节,如果不做任何操作的话,那么访问文件的指针是不会动的,所以永远也不会移动到文件的末尾,c == EOF的条件总是不会成立。
c = fgetc(fp);
while (c != EOF)
{
printf("%c", c);
c = fgetc(fp);
}
[解决办法]
fgetc(fp)得到一个字符后,指针后移,移向下一个字符,正好进入循环判断,而程序3中c得到了第一个字符后,不能得到后面的字符,所以进入死循环
[解决办法]
D:\\
字符串内的转义字符
[解决办法]
while ((c = fgetc(fp))!= EOF)
{
printf("%c", c);
}
和
while (c != EOF) { printf("%c", c); }
不一样
[解决办法]
int fgetc(FILE *stream)
fgetc returns the next character of stream as an unsigned char (converted to an int), or EOF if end of file or error occurs.
[解决办法]
少了循环 把fgetc加到循环里面去吧