菜鸟求助,一道C语言的题,麻烦大家帮我看看哪儿错了。。。。。
【问题描述】写一程序将一个文件fcopy.in拷贝至另一个文件fcopy.out,其中在所拷贝的文件中,多个连续空白符(包括空格符、制表符)只拷贝一个空格符,其它字符不变...
【问题描述】
写一程序将一个文件fcopy.in拷贝至另一个文件fcopy.out, 其中在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符, 其它字符不变。
【输入形式】
源文件名和目标文件名分别为fcopy.in和fcopy.out,程序将从当前目录下读取fcopy.in文件。
【输出形式】
将fcopy.in文件内容拷贝至当前目录下的fcopy.out文件中。在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符,若非空白符之间有一个制表符,则该制表符也要替换为空格符,其它字符不变。
【输入样例】
假如文件fcopy.in中内容如下:
Alcatel provides end-to-end solutions.
【输出样例】
输出文件fcopy.out中内容为:
Alcatel provides end-to-end solutions.
【样例说明】
将文件fcopy.in拷贝到fcopy.out,同时做适当的转换。
我的程序
#include<stdio.h>
int main()
{
char ch,a[1000];
int i=0,k;
FILE*in,*out;
in=fopen("copy.in","r");
out=fopen("copy.out","w");
while((ch=fgetc(in))!=EOF)
{
if(ch==' '||ch==' ')
ch=' ';
a[i]=ch;
i++;
}
i=0;
while(a[i]!=EOF||a[i]==' ')
{
if(a[i+1]==' ')
{
for(k=i+1;a[k]==' ';k++);
a[i+1]=a[k];
}
ch=a[i];
fputc(ch,out);
i++;
}
fclose(in);
fclose(out);
return 0;
} 展开
写一程序将一个文件fcopy.in拷贝至另一个文件fcopy.out, 其中在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符, 其它字符不变。
【输入形式】
源文件名和目标文件名分别为fcopy.in和fcopy.out,程序将从当前目录下读取fcopy.in文件。
【输出形式】
将fcopy.in文件内容拷贝至当前目录下的fcopy.out文件中。在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符,若非空白符之间有一个制表符,则该制表符也要替换为空格符,其它字符不变。
【输入样例】
假如文件fcopy.in中内容如下:
Alcatel provides end-to-end solutions.
【输出样例】
输出文件fcopy.out中内容为:
Alcatel provides end-to-end solutions.
【样例说明】
将文件fcopy.in拷贝到fcopy.out,同时做适当的转换。
我的程序
#include<stdio.h>
int main()
{
char ch,a[1000];
int i=0,k;
FILE*in,*out;
in=fopen("copy.in","r");
out=fopen("copy.out","w");
while((ch=fgetc(in))!=EOF)
{
if(ch==' '||ch==' ')
ch=' ';
a[i]=ch;
i++;
}
i=0;
while(a[i]!=EOF||a[i]==' ')
{
if(a[i+1]==' ')
{
for(k=i+1;a[k]==' ';k++);
a[i+1]=a[k];
}
ch=a[i];
fputc(ch,out);
i++;
}
fclose(in);
fclose(out);
return 0;
} 展开
2个回答
展开全部
#include<stdio.h>
int main()
{
char ch,a[1000];
int i=0,k;
FILE*in,*out;
in=fopen("copy.in","r");
if (NULL == in)
{
printf("can not open the in-file/n");
return -1;
}
out=fopen("copy.out","w+");
do
{
ch=fgetc(in);
if(ch==' '||ch==' ')
ch=' ';
a[i]=ch;
i++;
}while(ch!=EOF);
i=0;
while(a[i]!=EOF)
{
ch=a[i];
for(k = i; a[k] == ' '; k++);
fputc(ch,out);
i = a[i] == ' ' ? k : i + 1;
}
fclose(in);
fclose(out);
return 0;
}
//我尽量保留了你的思路。其实有更好的算法的!
//多思考!
int main()
{
char ch,a[1000];
int i=0,k;
FILE*in,*out;
in=fopen("copy.in","r");
if (NULL == in)
{
printf("can not open the in-file/n");
return -1;
}
out=fopen("copy.out","w+");
do
{
ch=fgetc(in);
if(ch==' '||ch==' ')
ch=' ';
a[i]=ch;
i++;
}while(ch!=EOF);
i=0;
while(a[i]!=EOF)
{
ch=a[i];
for(k = i; a[k] == ' '; k++);
fputc(ch,out);
i = a[i] == ' ' ? k : i + 1;
}
fclose(in);
fclose(out);
return 0;
}
//我尽量保留了你的思路。其实有更好的算法的!
//多思考!
展开全部
#include<stdio.h>
int main()
{
char ch,a[1000];
int i=0,k;
FILE*in,*out;
in=fopen("copy.in","r");
out=fopen("copy.out","w");
while((ch=fgetc(in))!=EOF)
{
a[i]=ch;
i++;
}
k=i;
for(i=0;i<k;i++)
{
fputc(a[i],out);
if(a[i]==' ')
for(;a[i+1]==' ';)
i++;
}
fclose(in);
fclose(out);
return 0;
}
int main()
{
char ch,a[1000];
int i=0,k;
FILE*in,*out;
in=fopen("copy.in","r");
out=fopen("copy.out","w");
while((ch=fgetc(in))!=EOF)
{
a[i]=ch;
i++;
}
k=i;
for(i=0;i<k;i++)
{
fputc(a[i],out);
if(a[i]==' ')
for(;a[i+1]==' ';)
i++;
}
fclose(in);
fclose(out);
return 0;
}
追问
怎么还是通不过测试呢?
提交上去只是:
运行时错误(SIGSEGV)
错误原因可能是:
非法的内存引用, 具体原因可能是:
1.数组越界使用;
2.指针的错误使用, 一般是对非用户区的地址空间进行读或者写操作;
3.越权操作文件指针, 程序中却未捕捉该类错误;
4.栈溢出, 一般是因为过多的递归调用或者过大的临时变量导致
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询