关于文件
#include<stdio.h>void main()
{
FILE *fp;
char ch;
if((fp=fopen("file1.txt","r"))==NULL)
{
printf("cannot open this file.\n");
exit(1);
}
while((ch=fgetc(fp))!=EOF)
putchar(ch);
fclose(fp);
}
这个读敢文件的程序,为什么我把file1.txt里面的内容全部删掉,但在TC上运行时,没有打印为空时的那段话呢?但在VC++上能打印出来 不清楚VC这个东西是怎么处理的。我手上只有dmc编译器,表现和tc一样。
我想大小为0kb的空文件,不代表他的文件指针也是空的。
if((fp=fopen("file1.txt","r"))==NULL)这句只是判断这个文件存在与否,并没有判断这个文件的大小是不是为空。 LZ这次代码好看多了,先赞一下...不过,还是推荐用[ code ] [ / code ]把代码括起来,看起来更方便...
但是,VC++真能打印出那句话么...
把LZ的代码直接复制到一个叫z.c的文件里.在命令行使用cl z.c进行编译,然后执行程序.我就看到了下面的内容:
C:\\>cl z.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.20706.01 for 80x86
Copyright (C) Microsoft Corporation.All rights reserved.
z.c
Microsoft (R) Incremental Linker Version 9.00.20706.01
Copyright (C) Microsoft Corporation.All rights reserved.
/out:z.exe
z.obj
C:\\>z
C:\\>
顺带,当前运行目录下保证有下列文件:
C:\\>dir *.txt *.c *.obj *.exe
驱动器 C 中的卷没有标签。
卷的序列号是 D4D4-C6D5
C:\\ 的目录
2007-10-2319:26 0 file1.txt
C:\\ 的目录
2007-10-1520:27 1,420 test.c
2007-10-2319:26 256 z.c
2007-10-1920:47 1,584 zz.c
C:\\ 的目录
2007-10-2018:44 3,049 fib.obj
2007-10-2319:26 926 z.obj
2007-10-1920:41 1,358 zz.obj
C:\\ 的目录
2007-10-2018:44 48,640 fib.exe
2007-10-2319:26 58,368 z.exe
2007-10-1920:41 48,640 zz.exe
LS说的完全没错.所以不用重复了...||
我只是怀疑VC++是否能重复LZ说的行为,并且验证了一次而已 我想LZ在VC试验的时候肯定忘记放那个文件了 也许是工作目录没有设置正确。使用默认的工程设置,在IDE中启动程序,工作目录是设置在project目录的,但程序实际存在于$config目录,比如Debug或者Release什么的。
文件没有摆对地方就会出现诡异的事情。 在tc里要加上getch();
if((fp=fopen("file1.txt","r"))==NULL)
{
printf("cannot open this file.\\n");
getch();
exit(1);
}
getch()只是为了在显示了标准输出之后,程序退出前阻塞程序而已吧。如果本来就是在命令行上的话,加不加都无关紧要。
页:
[1]