有少数初学者编程时,没有留意行末多余的空白字符,这不是好的编程习惯。现在请你编写一个函数,把初学者源程序文件中每行末尾多余的空白字符全都删去。
函数原型
// 删除行末空白字符
void Cut(FILE *src, FILE *dst);
说明:参数 src
和 dst
均为文件指针,其中:src
指示初学者的源程序文件,dst
指示整理后的源程序文件。
注:
裁判程序
#include <stdio.h>
#include <ctype.h>
#include <string.h>
// 删除行末空白字符
void Cut(FILE *src, FILE *dst);
int main()
{
char sname[1024], dname[1024];
FILE *sfile, *dfile;
gets(sname);
gets(dname);
sfile = fopen(sname, "rb");
if (!sfile)
{
printf("%s 无法打开!\n", sfile);
}
dfile = fopen(dname, "wb");
if (!dfile)
{
printf("%s 无法打开!\n", dfile);
}
if (sfile && dfile)
{
printf("正在整理...");
Cut(sfile, dfile);
puts("整理完成!");
}
if (sfile)
{
fclose(sfile);
}
if (dfile)
{
fclose(dfile);
}
return 0;
}
/* 你提交的代码将被嵌在这里 */
输入样例
old.c
new.c
old.c
...#include...<stdio.h>...
...
...int...main()...
...{...
.......printf("Hello,...world!\n");...
.......return...0;...
...}...
其中:... 表示若干空格符或水平制表符
输出样例
正在整理...整理完成!
new.c
...#include...<stdio.h>
...int...main()
...{
.......printf("Hello,...world!\n");
.......return...0;
...}
不明白我写的代码问题出在哪
void Cut(FILE *src, FILE *dst)
{
char now;
int i,k,j,s=0;
while((now=fgetc(src))!=-1){
fseek(src,-1,SEEK_CUR);
i=0,j=0;
do{
now=fgetc(src);
i++;
s++;
}while(now!='\n');
fseek(src,-3,SEEK_CUR);
do{
now=fgetc(src);
fseek(src,-2,SEEK_CUR);
j++;
}while(now==' '||now=='\t');
j--;
fseek(src,-(i-j-4),SEEK_CUR);
if((now=fgetc(src))==-1){
rewind(src);
fseek(src,s-i,SEEK_CUR);
}
else
fseek(src,-1,SEEK_CUR);
for(k=0;k<(i-j-2);k++){
now=fgetc(src);
fputc(now,dst);
}
fputc('\n',dst);
fseek(src,j+2,SEEK_CUR);
}
}
求大佬指点!
要判断分号吧,分号后面的空格才是多余的空格
可以尝试一下用fputs解决,思路会清晰很多的,我是这样编出来的
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html