请教一个C语言中fgetc和fputc的问题!
本帖最后由 peri_jin 于 2009-6-27 16:08 编辑In der Datei eingabe.txt beginnt jede Zeile mit einem Datum der Form TT.MM.JJJJ, dem ein Zeilenumbruch folgt. D.h. in jeder Zeile steht genau ein Datum. Sie sollen nun die Datei kopieren, wobei die Punkte in einem Datum durch Doppelpunkte ersetzt werden. D.h. aus “16.07.2007“ in der Datei eingabe.txt wird “16:07:2007“ in der Datei ausgabe.txt.
以上是原题,我考虑的问题是如果在eingabe.txt中有z.B 16.这样的数字出现,但是不是一个完整的datum就不应该被拷贝过来。我的问题是怎么判断这是个datum呢?int (FILE*fin,FILE*fout)
{ char c;
while((c=fgetc(filein))!=EOF)
{ if(c>=0||c<=9)
{ fgetc(c, fileout);
c=fgetc(filein);
if(c==".")
{ c=":";
fputc(c, fileout);
c=fgetc(filein);
}
else c=fgetc(filein);
} 不合法的输入数据在这里应该不予考虑,你只要按输入一定是合法的写就行了。 你的程序好像也有问题,几十年没有写C了,不过看逻辑应该是有问题的。 不合法的输入数据在这里应该不予考虑,你只要按输入一定是合法的写就行了。
Pant1980 发表于 2009-7-8 12:10 http://www.dolc.de/forum/images/common/back.gif
同意
人家题目说的是每行都是以TT.MM.JJJJ格式的日期开始,然后后面就是个换行符
所以每行都是一个完整的那种格式的日期啊,你完全不用去考虑日期不合法的情况,只要把点全变成冒号就行了{:5_342:}
你的程序我粗略看了一下,你是一个字符一个字符的读,这样的话,如果文章长度很长,效率会比较低。
既然题目说格式是固定的,你可以考虑用fscanf来读取,然后fprintf写入新文件,用这两个函数是因为他们可以自定义format。e.g. "%2d.%2d.%4d\n"用于fscanf ,"%2d:%2d:%4d\n"用于fprintf
好久没有用C语言了,大致就是这个思路吧,你再自己琢磨琢磨{:5_312:} 不过要是题目要求必须用fgetc和fputc的话就别管我上面写的了,嘻嘻~{:5_327:}
你就直接一个一个读就行了,遇到点号变冒号,不用判断日期数字是否合法{:5_342:} 考虑太多了吧!其实就是找到所有的”点“,把他们替换成"冒号"
页:
[1]