#include <stdio.h>
void main()
{
FILE * fp3;
char buffer[64];
if((fp3=fopen("file4.txt","a"))==NULL)
{
printf("can't open file \n");
exit(1);
}
while(strlen(fgets(buffer,64,stdin))>0)
{
fputs(buffer,fp3);
fputs("\n",fp3);
}
fclose(fp3);
}
这是教材上的一个程序,目的是“从键盘输入若干行字符,把他们添加到磁盘文件file4.txt中”,但我执行了好多次,不但没有添加进去,反而程序无法正常结束,不管怎么按回车都没能退出程序。而教材解释说 while(strlen(fgets(buffer,64,stdin))>0)
的功能是“从键盘读入一行字符,并测试读入的字符串长度是否为0”,最后解释“程序通过检测输入的字符串长度是否为0控制是否结束循环,因而输入完所有的字符串之后,在输入新一行开始就输入一个回车键,便可以终止程序”,貌似很有道理,可执行起来怎么就没完没了了呢?
把程序改成下面的形式倒是可以结束了,可是输出来却不如人意。在vc中产生了一连串火星文,在TC中只能输出第一个字符,然后换行。
#include<stdio.h>
#include<string.h>
int main()
{
FILE * fp;
char s[64];
char s2[64];
int i;
int j=0;
if((fp=fopen("f:\\cfile2.txt","w"))==NULL)
{
printf("cfile.txt canot be open ! \n");
getchar();
return 0;
}
printf("请输入一组字符的字符串并回车,按esc键退出:\n");
while(strlen(fgets(s,64,stdin))>0)
{
for(i=0;i<64;i++)
{
if(s[i]=='\0')
{
while(j<i-1)
s2[j++]=s[j++];
fputs(s2,fp);
fputs("\n",fp);
if(fclose(fp)!=0)
{
printf("f:\\cfile.txt cannot be closed !\n");
}
else
printf("cfile.txt was now closed !\n");
getchar();
return 0;
}
}
fputs(s,fp);
fputs("\n",fp);
}
if(fclose(fp)!=0)
{
printf("f:\\cfile.txt cannot be closed !\n");
}
else
printf("cfile.txt was now closed !\n");
getchar();
return 0;
}
青春有我
白板的微信
ITMISS
相关分类