当前位置: 代码迷 >> C语言 >> [求助]为什么要接收 回车符??
  详细解决方案

[求助]为什么要接收 回车符??

热度:185   发布时间:2006-05-11 18:40:00.0
[求助]为什么要接收 回车符??

//从键盘输入一些字符, 逐个把它们送到磁盘上去, 直到输入一个"#"为止
#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编辑过]

搜索更多相关的解决方案: 回车  

----------------解决方案--------------------------------------------------------

//将一个磁盘文件中的信息复制到另一个磁盘文件中.
#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;
}


----------------解决方案--------------------------------------------------------
楼上的程式,如果a.txt文件中包括""字符, 则把a.txt copy to b.txt时,""字符后面的内容都不能被COPY. 为什么? ""字符表示结束的标志吗?

如附件.


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


----------------解决方案--------------------------------------------------------

[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]


----------------解决方案--------------------------------------------------------

[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]


----------------解决方案--------------------------------------------------------
 这个东西我查看了,值确实为-1
----------------解决方案--------------------------------------------------------
第一个ch = getchar (); //此语句用来接收在执行scanf语句时最后输入的回车符,
第二个ch = getchar (); //此语句用来接收输入的第一个字符,

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

第二个ch = getchar (); 为什么要接收第一个字符. while loop中不是已经有getchar了吗>.

----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
直到输入一个"#"为止 是什么意思?

"#"要不要输入到文件里去?
----------------解决方案--------------------------------------------------------

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

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

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

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


----------------解决方案--------------------------------------------------------
  相关解决方案