文件读写

didijiji 2012-12-27 05:32:58
在我的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;
}

这个程序的话就一直不停的输出'#',为什么呢?
...全文
250 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
huhaifengasd 2012-12-30
  • 打赏
  • 举报
回复
少了循环 把fgetc加到循环里面去吧
AnYidan 2012-12-28
  • 打赏
  • 举报
回复
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.
AnYidan 2012-12-28
  • 打赏
  • 举报
回复
while ((c = fgetc(fp))!= EOF) { printf("%c", c); } 和 while (c != EOF) { printf("%c", c); } 不一样
didijiji 2012-12-28
  • 打赏
  • 举报
回复
引用 8 楼 lin5161678 的回复:
D:\\ 字符串内的转义字符
貌似这个没太大关系,加一个,加两个,加三个'\'结果都是一样的。
jilianglijie 2012-12-28
  • 打赏
  • 举报
回复
呃,今天看到了好多这种问题,得先检查程序逻辑啊,程序1只读了一个字符就进入循环了,如果是空文件还好,否则将陷入死循环。
lin5161678 2012-12-28
  • 打赏
  • 举报
回复
D:\\ 字符串内的转义字符
proorck6 2012-12-28
  • 打赏
  • 举报
回复
循环需要一个开始、一个递进、一个结束条件。 用for语句正和这个规则。 for(开始;结束条件;递进)
一起来玩玩呗 2012-12-28
  • 打赏
  • 举报
回复
前排们,都说地差不多了,不过那个while 是个死循环,我还是忍不住说了一句
  • 打赏
  • 举报
回复
引用 3 楼 turingo 的回复:
fgetc从文件读取一个字符,同时使得访问文件的指针后移一个字节,如果不做任何操作的话,那么访问文件的指针是不会动的,所以永远也不会移动到文件的末尾,c == EOF的条件总是不会成立。 C/C++ code?1234567 c = fgetc(fp); while (c != EOF) { printf("%c", c); ……
额,您快了一步
  • 打赏
  • 举报
回复
fgetc(fp)得到一个字符后,指针后移,移向下一个字符,正好进入循环判断,而程序3中c得到了第一个字符后,不能得到后面的字符,所以进入死循环
图灵狗 2012-12-27
  • 打赏
  • 举报
回复
fgetc从文件读取一个字符,同时使得访问文件的指针后移一个字节,如果不做任何操作的话,那么访问文件的指针是不会动的,所以永远也不会移动到文件的末尾,c == EOF的条件总是不会成立。

    c = fgetc(fp);
 
    while (c != EOF)
    {
        printf("%c", c);
        c = fgetc(fp);
    }
lee_鹿游原 2012-12-27
  • 打赏
  • 举报
回复


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;
}
t1397018 2012-12-27
  • 打赏
  • 举报
回复

#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;}
没加入循环,输出的都是第一个字符

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧