#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *in,*out;
char ch,infile[10],outfile[10];
printf("输入读入文件的名字:");
scanf("%s",infile);
printf("输入输出文件的名字:");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL) //打开一个输入文件
{
printf("无法打开此文件\n");
exit(0);
}
if((out=fopen(infile,"w"))==NULL) //打开一个输出文件
{
printf("无法打开此文件\n");
exit(0);
}
ch=fgetc(in);
while(!feof(in)) //如果未遇到输入文件的结束标志
{
fputc(ch,out);
putchar(ch); //将ch显示到屏幕上
ch=fgetc(in);
}
putchar(10); //显示完全部字符后换行
fclose(in);
fclose(out);
return 0;
}
fputc(ch,out);
这里下断点,调试下,看看是否真的有写入
另外检查文件是否是你打开看到的那个,是不是写到别的目录下去了。
第17行的infile应为outfile,即以写模式打开outfile代表的文件;
然后如果是需要从输入获取字符的话, 还需要增加获取输入和写入文件的代码。
修改如下:
参考链接:
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *in,*out;
char ch,infile[100],outfile[100];
printf("输入读入文件的名字:");
scanf("%s",infile);
printf("输入输出文件的名字:");
scanf("%s",outfile);
// printf("infile=%s, outfile=%s\n",infile,outfile);
// 假设先从输入读取字符输入infile文件
if((in=fopen(infile,"w"))==NULL) //打开一个输入文件
{
printf("无法打开此文件\n");
exit(0);
}
fflush(stdin); // 清空缓冲区
printf("请输入文件的内容:\n");
// 从输入获取字符,然后写入文件infile,直到输入'#'停止
while((ch=getchar())!='#'){
fputc(ch,in);
}
fclose(in);
// 再将infile文件的内容复制到outfile
// https://blog.csdn.net/kangjianwei101/article/details/50517536
if((in=fopen(infile,"r"))==NULL) //打开一个输入文件
{
printf("无法打开此文件\n");
exit(0);
}
// 以写模式打开文件名为outfile的文件 ,这里应为outfile
if((out=fopen(outfile,"w"))==NULL) //打开一个输出文件
{
printf("无法打开此文件\n");
exit(0);
}
ch=fgetc(in);
while(!feof(in)) //如果未遇到输入文件的结束标志
{
fputc(ch,out);
putchar(ch); //将ch显示到屏幕上
ch=fgetc(in);
}
putchar(10); //显示完全部字符后换行
fclose(in);
fclose(out);
return 0;
}
基于new bing的编写:
在你提供的代码中,有一个错误导致输出文件为空。问题在于打开输出文件时,使用了与输入文件相同的文件名,应该改为使用outfile变量来指定输出文件的文件名。以下是修改后的代码:
#include<stdio.h>
#include<stdlib.h>
int main() {
FILE *in, *out;
char ch, infile[10], outfile[10];
printf("输入读入文件的名字:");
scanf("%s", infile);
printf("输入输出文件的名字:");
scanf("%s", outfile);
if ((in = fopen(infile, "r")) == NULL) { // 打开一个输入文件
printf("无法打开此文件\n");
exit(0);
}
if ((out = fopen(outfile, "w")) == NULL) { // 打开一个输出文件
printf("无法打开此文件\n");
exit(0);
}
ch = fgetc(in);
while (!feof(in)) { // 如果未遇到输入文件的结束标志
fputc(ch, out);
putchar(ch); // 将ch显示到屏幕上
ch = fgetc(in);
}
putchar(10); // 显示完全部字符后换行
fclose(in);
fclose(out);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct DNode
{
ElemType data;//存放元素值
struct DNode *prior;//指向前驱结点
struct DNode *next;//指向后继结点
}DLinkNode;//双链表的结点类型
void CreateListF(DLinkNode *&L, ElemType a[], int n)//头插法建立双链表
{
DLinkNode *s;
L = (DLinkNode*)malloc(sizeof(DLinkNode));
L->next = NULL;
for (int i = 0; i < n; i++)
{
s = (DLinkNode*)malloc(sizeof(DLinkNode));
s->data = a[i];
s->next = L->next;
if (L->next!= NULL)
L->next->prior = s;
L->next = s;
s->prior = L;
}
s = L->next;
while (s->next != NULL)
s = s->next;
s->next = L;
L->prior = s;
}
void CreateListR(DLinkNode*&L, ElemType a[], int n)//尾插法建立双链表
{
DLinkNode *s, *r;
L = (DLinkNode*)malloc(sizeof(DLinkNode));
L->next = NULL;
r = L;
for (int i = 0; i < n; i++)
{
s = (DLinkNode*)malloc(sizeof(DLinkNode));
s->data = a[i];
r->next = s;
s->prior = r;
r = s;
}
r->next = L;
L->prior = r;
}
void InitList(DLinkNode*&L)//初始化线性表
{
L = (DLinkNode*)malloc(sizeof(DLinkNode));
L->prior = L->next = L;
}
void DestroyList(DLinkNode *&L)//销毁线性表
{
DLinkNode *pre = L, *p = pre->next;
while (p != L)
{
free(L);
pre = p;
p = pre->next;
}
free(pre);
}
bool ListEmpty(DLinkNode *L)//判断线性表是否为空
{
return(L->next = NULL);
}
int ListLength(DLinkNode *L)//求线性表的长度
{
DLinkNode *p = L;
int i = 0;
while (p->next != L)
{
i++;
p = p->next;
}
return i;
}
void DispList(DLinkNode *L)//输出线性表
{
DLinkNode *p= L->next;
while (p != L)
{
printf("%c", p->data);
p = p->next;
}
printf("\n");
}
bool GetElem(DLinkNode *L, int i, ElemType &e)//求线性表第i个元素值
{
int j = 1;
DLinkNode *p = L->next;
if (i <= 0 || L->next == L)
return false;
while (j < i&&p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)
return false;
else
{
e = p->data;
return true;
}
}
int LocateElem(DLinkNode *L, ElemType e)//查找第一个值域为e的元素序号
{
int i = 1;
DLinkNode *p = L->next;
while (p != NULL && p->data != e)
{
i++;
p = p->next;
}
if (p == NULL)
return false;
else
return i;
}
bool ListInsert(DLinkNode *&L, int i, ElemType e)//插入第i个元素
{
int j = 0;
DLinkNode *p = L, *s;
if (i < 0)
return false;
while (j < i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)
return false;
else
{
s = (DLinkNode*)malloc(sizeof(DLinkNode));
s->data = e;
s->next = p->next;
if (p->next != NULL)
p->next->prior = s;
s->prior = p;
p->next = s;
return true;
}
}
bool ListDelete(DLinkNode*&L, int i, ElemType &e)//删除第i个元素
{
int j = 0;
DLinkNode *p = L, *q;
if (i <= 0)
return false;
while (j < i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)
return false;
else {
q = p->next;
if (q == NULL)
return false;
e = q->data;
p->next = q->next;
if (p->next != NULL)
p->next->prior = p;
free(q);
return true;
}
}
int main()
{
DLinkNode *h;
ElemType e;
printf("双链表的基本运算如下:\n");
printf(" (1) 初始化双链表h\n");
InitList(h);
printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n");
ListInsert(h, 1, 'a');
ListInsert(h, 2, 'b');
ListInsert(h, 3, 'c');
ListInsert(h, 4, 'd');
ListInsert(h, 5, 'e');
printf(" (3)输出双链表h:\n");
DispList(h);
printf(" (4)双链表h长度:%d\n", ListLength(h));
printf(" (5)双链表h为%s\n", (ListEmpty(h) ? "空" : "非空"));
GetElem(h, 3, e);
printf(" (6)双链表h的第3个元素:%c\n", e);
printf(" (7)元素a的位置:%d\n", LocateElem(h, 'a'));
printf(" (8)在第4个元素位置上插入f元素\n");
ListInsert(h, 4, 'f');
printf(" (9)输出双链表h:\n");
DispList(h);
printf(" (10)删除h的第3个元素\n");
ListDelete(h, 3, e);
printf(" (11)输出双链表h:\n");
DispList(h);
printf(" (12)释放双链表h\n");
DestroyList(h);
return 1;
}
有错请指正!
供参考:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *in,*out;
char ch,infile[32],outfile[32];
printf("输入读入文件的名字:");
scanf("%s",infile);
printf("输入输出文件的名字:");
scanf("%s",outfile);
if((in=fopen(infile,"wt"))==NULL)
{
printf("无法打开此文件\n");
exit(0);
}
printf("从键盘输入字符,以'#'结束:\n");//修改
getchar(); //修改
while((ch = getchar()) != '#') // while(!feof(in)) 修改
{
fputc(ch, in);
putchar(ch);//将ch显示到屏幕上
}
fputc('#', in);
fclose(in);
// 以下将文件1复制到另一个文件2
if((in=fopen(infile,"rt"))==NULL)
{
printf("无法打开此文件\n");
exit(0);
}
if((out=fopen(outfile,"wt"))==NULL) //if((out=fopen(infile,"w"))==NULL)修改
{
printf("无法打开此文件\n");
exit(0);
}
while ((ch = fgetc(in)) != '#') fputc(ch, out);
fputc('#', out); //修改
fclose(in);
fclose(out);
return 0;
}