一个有getchar()函数的关于文件I/O的程序,引发多个问题
从键盘输入一些字符,逐个把它们送到磁盘上去,知直到输入 "# "为止
程序如下
main()
{
FILE *fp;
char ch,filename[10];
scanf( "%s ",filename);
if( (fp=fopen(filename, "a+ "))==NULL)
{printf( "cannot open file\n ");
exit(0);
}
ch=getchar();/*接受最后输入的回车符*/
ch=getchar();/*接受输入的第一个字符*/
while(ch!= '# ')
{
fputc(ch,fp);
ch=getchar();
}
fclose(fp);
}
疑问一:
ch=getchar();/*接受回车符*/
ch=getchar();/*接受输入的第一个字符*/
while(ch!= '# ')
{
fputc(ch,fp);
ch=getchar();
}
对这段程序,我是这样理解的,比如我输入 abcd回车
第一个ch=getchar()接受了 回车
第二个ch=getchar()接受了 a
然后在while(ch!= '# '),判断ch是否为#, 如果不是的话,把ch写到文件里,
然后ch=getchar();再接受字符,这里我感觉它还是接受a啊
不知道getchar()是怎么做到自动的去接受下一个字符的.
疑问二:
送到文件里的字符在定义的数组filename[10]里存放的情况是怎样的呢
比如我输入:
asdf回车
123回车
#
请问asdf是放在filename[0]里吗?
数组filename[10]的长度对输入的字符的量有影响吗?
数组filename[10]和在磁盘里所建立的文件空间大小有什么联系吗?
疑问三:
假如我输入的文件名字为file.c
请问:程序是不是运行到fp=fopen(filename, "a+ ")这条语句后才在磁盘里建立文件的呢?
因为每次所建的文件我见都是放在和程序同一个目录里,所以所建立的文件的地址能改动吗?能的话,对于上面的程序要如何改动呢
[解决办法]
比如我输入 abcd回车
第一个ch=getchar()接受了 回车
第二个ch=getchar()接受了 a
请注意,第一个 ch=getchar() 接收的是输入 文件名的时候输入的回车符号