| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1828 人关注过本帖
标题:[求助]为什么要接收 回车符??
只看楼主 加入收藏
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
 问题点数:0 回复次数:10 
[求助]为什么要接收 回车符??

//从键盘输入一些字符, 逐个把它们送到磁盘上去, 直到输入一个"#"为止
#include "stdio.h"

int main(int argc, char *argv[])
{
FILE *fp;
char ch, filename[10];
scanf ("%s", filename);

if ((fp = fopen (filename, "w")) == NULL)
{
printf ("can't open file \n");
exit (0);
}
ch = getchar (); //此语句用来接收在执行scanf语句时最后输入的回车符, 为什么要接收 回车符
ch = getchar (); //此语句用来接收输入的第一个字符, 为什么要接收第一个字符 while loop中不是已经有getchar了吗>.
//把上面的两句删除掉,只是当输入filename后,多了一次换行.结果也是对的.

while (ch != '#')
{
fputc (ch, fp);
putchar (ch);
ch = getchar ();
}
fclose (fp);

getch ();
return 0;
}

[此贴子已经被作者于2006-5-11 19:40:47编辑过]

搜索更多相关主题的帖子: 回车 
2006-05-11 18:40
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 

//将一个磁盘文件中的信息复制到另一个磁盘文件中.
#include "stdio.h"

int main(int argc, char *argv[])
{
FILE *in, *out;
char ch, infile[10], outfile[10];

printf ("Enter the infile name : \n");
scanf ("%s", infile); //提示输入要COPY的源文件名称.
printf ("Enter the outfile name : \n");
scanf ("%s", outfile); //提示输入要COPY为的新文件名称.

if ((in = fopen (infile, "r")) == NULL) //判断要COPY的文件是否存在, 为什么我输入一个在当前目录中不存在的文件名也不会提示can't open file.
{
printf ("can't open file \n");
exit (0);
}
if ((out = fopen (outfile, "w")) == NULL)//这句的意思是判断要创建的新文件是否成功吗?
{
printf ("can't open file \n");
exit (0);
}

while (! feof (in)) //判断要COPY的新文件是否结束
fputc (fgetc (in), out);
printf("1 file copied!");

fclose (in);
fclose (out);

getch ();
return 0;
}

2006-05-11 18:43
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
楼上的程式,如果a.txt文件中包括""字符, 则把a.txt copy to b.txt时,""字符后面的内容都不能被COPY. 为什么? ""字符表示结束的标志吗?

如附件.

uME7Ubr7.txt (994 Bytes)

[此贴子已经被作者于2006-5-11 19:42:12编辑过]

2006-05-11 19:39
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

[CODE]
#include "stdio.h"

int main(int argc, char *argv[])
{
FILE *fp;
char ch, filename[10];
scanf ("%s", filename); /*换行符或者空格留在输入缓冲区*/

if ((fp = fopen (filename, "w")) == NULL)
{
printf ("can't open file \n");
exit (0);
}
ch = getchar (); /*保留一行,显然换行符或者空格被写入了文件*/
ch = getchar (); /*两行都不留,ch是不可预知的,部分编译器有默认值*/

while (ch != '#')
{
fputc (ch, fp);
putchar (ch);
ch = getchar ();
}
fclose (fp);

return 0;
}

[/CODE]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-12 00:07
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

[CODE]
#include "stdio.h"

int main(int argc, char *argv[])
{
FILE *in, *out;
char ch, infile[10], outfile[10];

printf ("Enter the infile name : \n");
scanf ("%s", infile);
printf ("Enter the outfile name : \n");
scanf ("%s", outfile);

if ((in = fopen (infile, "r")) == NULL) /*不存在一定会提示*/
{
printf ("can't open file \n");
exit (-1);
}
if ((out = fopen (outfile, "w")) == NULL) /*判断创建是否成功*/
{
printf ("can't open file \n");
exit (-1);
}

while ( (ch=fgetc(in)) != -1 ) /*这样*/
fputc (ch, out);
printf("1 file copied!");

fclose (in);
fclose (out);

return 0;
}

[/CODE]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-12 00:17
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
 这个东西我查看了,值确实为-1

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-12 00:31
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
第一个ch = getchar (); //此语句用来接收在执行scanf语句时最后输入的回车符,
第二个ch = getchar (); //此语句用来接收输入的第一个字符,

=========
还是不太理解上面的两句ch = getchar (); .
执行第一个ch = getchar (); 后难道回车符就不在缓冲区内了吗? 那如果是, 第二个ch = getchar (); 接收的第一个字符应试也不会写入文件了.

第二个ch = getchar (); 为什么要接收第一个字符. while loop中不是已经有getchar了吗>.
2006-05-12 13:30
tianyu1983
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-4-17
收藏
得分:0 
2006-05-12 13:48
haiduc
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2005-11-30
收藏
得分:0 
直到输入一个"#"为止 是什么意思?

"#"要不要输入到文件里去?

2006-05-12 14:00
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

动脑筋,找着程序理下思路,不要想当然

第一个接受了缓冲区里的换行符(也可能是空格),输入缓冲区就空了

那第二个就接受应该写入文件的第一个字符

不然ch还没接收字符,怎么执行while中的第一行fputc (ch, fp);


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-12 21:08
快速回复:[求助]为什么要接收 回车符??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023911 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved