首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

文件读写解决思路

2013-01-26 
文件读写在我的d盘根目录下有一个BianMa.java文件,文件里面的文本就是程序的源代码。[程序1:]#includestdi

文件读写
在我的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加到循环里面去吧

热点排行