下面的程序执行后,文件file.txt中的内容是 void fun(char *fname, char *st); int main(void) { fun("file.txt", "How are you!"); fun("file.txt", "Fine, thank you!"); return 0; } void fun(char *fname, char *st) { FILE *fp; int len, i; fp = fopen(fname, "w"); if (NULL == fp) { printf("file open error!"); exit(1); } len = strlen(st); for (i=0; i<len; i++) fputc(st[i], fp); fclose(fp) ; }
时间: 2024-01-18 11:01:49 浏览: 125
执行后,文件file.txt中的内容是:
Fine, thank you!
因为程序每次执行fun函数时都会以写入的方式打开文件file.txt,并将传入的字符串st写入文件,所以第二次执行fun函数时会将"Fine, thank you!"覆盖掉之前写入的"How are you!",最终文件中只会保留最后一次写入的内容。
相关问题
编写一个程序,实现类CData,并用所提供的主函数进行测试。 除了构造函数外,它具有如下公有成员函数: 1. void Read(char * fname); 从所提供的文本文件file1.txt中读入若干个四位数整数存入数据成员; 2. void Find(); 可以在已读入的若干个四位数整数中找出符合条件的数,找出的数存入数据成员. 条件如下: abcd = (ab+cd)*(ab+cd) 如:3025 = (30+25)*(30+25), 将3025分为两个部分 30 和25, 使之相加后求平方的值恰好等于3025. 3. void Save(char *fname); 实现将找出的数存入本文文件中,文件名由形参fname指定.输出文件格式要求输出到文件的数每四个数成一行. 部分私有数据成员: 1. Node * pAllNumber; 该成员用于存储所有从文件中读入的四位数整数. 2. Node * pResult; 该成员用于存储所有符合条件的整数. 3. 两个指针变量均使用链表来存储整数,并提供如下结点的结构类型 Node : struct Node{ int data; Node * Next; }; 主函数: 1. 建立类Cdata的对象,分别调用成员函数完成测试。
好的,以下是实现类CData的程序代码:
```cpp
#include <iostream>
#include <fstream>
#include <cstring>
#include <cmath>
using namespace std;
// 定义结点类型
struct Node {
int data;
Node* next;
};
class CData {
private:
Node* pAllNumber; // 存储所有读入的四位数整数
Node* pResult; // 存储所有符合条件的整数
public:
CData() {
pAllNumber = NULL;
pResult = NULL;
}
~CData() {
Node* p = pAllNumber;
while (p != NULL) {
Node* q = p->next;
delete p;
p = q;
}
p = pResult;
while (p != NULL) {
Node* q = p->next;
delete p;
p = q;
}
}
void Read(char* fname) {
ifstream fin(fname);
if (!fin) {
cout << "文件打开失败!" << endl;
return;
}
int x;
while (fin >> x) {
if (x >= 1000 && x <= 9999) { // 读入四位数整数
Node* p = new Node;
p->data = x;
p->next = pAllNumber;
pAllNumber = p;
}
}
fin.close();
}
void Find() {
Node* p = pAllNumber;
while (p != NULL) {
int ab = p->data / 100;
int cd = p->data % 100;
if ((ab + cd) * (ab + cd) == p->data) {
Node* q = new Node;
q->data = p->data;
q->next = pResult;
pResult = q;
}
p = p->next;
}
}
void Save(char* fname) {
ofstream fout(fname);
if (!fout) {
cout << "文件打开失败!" << endl;
return;
}
Node* p = pResult;
int count = 0;
while (p != NULL) {
fout << p->data << " ";
count++;
if (count % 4 == 0) {
fout << endl;
}
p = p->next;
}
fout.close();
}
};
int main() {
CData data;
data.Read("file1.txt");
data.Find();
data.Save("file2.txt");
return 0;
}
```
使用该程序,可以完成题目所述的功能,即将满足条件的四位数整数读入、查找、保存到文件中。
注意,程序中的链表是手动创建并管理的,需要在析构函数中进行内存释放,避免内存泄漏。同时,输出到文件时需要按照题目要求每四个数成一行,因此需要对输出格式进行特殊处理。
给下面这段代码加上中文注释:#include <stdio.h> #include <stdlib.h> #include <string.h> void menu1(); void create_file(FILE *fp, char *fname); void write_file(FILE *fp, char *fname); void read_file(FILE *fp, char *fname); int main() { system("color F4"); FILE *fp = NULL; int count = 0; char num[100]; int flag1 = 0, flag2 = 0, flag3 = 0; char F_name[20]; while (1) { menu1(); printf("\t请选择你要进行的文件操作:"); scanf("%s", num); getchar(); while (strlen(num) > 1 || num[0] < 49 || num[0] > 52) { printf("\t输入错误!请重新输入:"); scanf("%s", num); getchar(); } switch (num[0]) { case '1': flag1 = 1; break; case '2': flag2 = 1; break; case '3': flag3 = 1; break; case '4': printf("\n\t"); exit(0); break; } if (flag1 == 1) { flag1 = 0; create_file(fp, F_name); } else if (flag2 == 1) { flag2 = 0; write_file(fp, F_name); } else if (flag3 == 1) { flag3 = 0; read_file(fp, F_name); } } return 0; } void menu1() { printf("\n\n"); printf(" *************************************** \n"); printf("\t \n"); printf(" 文本编辑器 \n"); printf("\t \n "); printf(" *************************************** \n"); printf("\t 1.建立文本 \n"); printf("\t 2.编辑文本 \n"); printf("\t 3.读取文本 \n"); printf("\t 4.退出程序 \n"); printf(" *************************************** \n"); } void write_file(FILE *fp, char *fname) { char ch; printf("\t请输入编辑的文件名:\n\t"); gets(fname); if ((fp = fopen(fname, "w")) == NULL) { printf("\t不能打开文件!\n"); exit(0); } printf("\t请输入内容(以#号键结束):\n\t"); ch = getchar(); while (ch != '#') { fputc(ch, fp); ch = getchar(); } printf("\n\n"); getchar(); fclose(fp); } void create_file(FILE *fp, char *fname) { printf("\t请输入新建的文件名:\n\t"); gets(fname); if ((fp = fopen(fname, "w+")) == NULL) { printf("\t不能打开文件!\n"); exit(0); } printf("\t%s文件已经创建好!\n\n", fname); fclose(fp); } void read_file(FILE *fp, char *fname) { char ch; printf("\t请输入读取的文件名:\n\t"); gets(fname); if ((fp = fopen(fname, "r")) == NULL) { printf("\t不能打开文件!\n"); exit(0); } printf("\t"); while ((ch = fgetc(fp)) != EOF) { putchar(ch); } printf("\t\n\n"); fclose(fp); }
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 创建菜单函数
void menu1();
// 创建文件函数
void create_file(FILE *fp, char *fname);
// 写入文件函数
void write_file(FILE *fp, char *fname);
// 读取文件函数
void read_file(FILE *fp, char *fname);
int main() {
// 设置控制台颜色
system("color F4");
// 初始化文件指针和计数器等变量
FILE *fp = NULL;
int count = 0;
char num[100];
int flag1 = 0, flag2 = 0, flag3 = 0;
char F_name[20];
// 进入程序循环
while (1) {
// 显示菜单
menu1();
// 获取用户输入的选项
printf("\t请选择你要进行的文件操作:");
scanf("%s", num);
getchar();
// 判断用户输入是否合法
while (strlen(num) > 1 || num[0] < 49 || num[0] > 52) {
printf("\t输入错误!请重新输入:");
scanf("%s", num);
getchar();
}
// 根据用户输入的选项进行相应操作
switch (num[0]) {
case '1':
flag1 = 1;
break;
case '2':
flag2 = 1;
break;
case '3':
flag3 = 1;
break;
case '4':
printf("\n\t");
exit(0);
break;
}
// 根据不同选项调用不同的函数
if (flag1 == 1) {
flag1 = 0;
create_file(fp, F_name);
} else if (flag2 == 1) {
flag2 = 0;
write_file(fp, F_name);
} else if (flag3 == 1) {
flag3 = 0;
read_file(fp, F_name);
}
}
return 0;
}
// 菜单函数
void menu1() {
printf("\n\n");
printf(" *************************************** \n");
printf("\t \n");
printf(" 文本编辑器 \n");
printf("\t \n ");
printf(" *************************************** \n");
printf("\t 1.建立文本 \n");
printf("\t 2.编辑文本 \n");
printf("\t 3.读取文本 \n");
printf("\t 4.退出程序 \n");
printf(" *************************************** \n");
}
// 写入文件函数
void write_file(FILE *fp, char *fname) {
char ch;
// 获取用户输入的文件名
printf("\t请输入编辑的文件名:\n\t");
gets(fname);
// 打开文件并判断是否打开成功
if ((fp = fopen(fname, "w")) == NULL) {
printf("\t不能打开文件!\n");
exit(0);
}
// 获取用户输入的内容并逐个写入文件
printf("\t请输入内容(以#号键结束):\n\t");
ch = getchar();
while (ch != '#') {
fputc(ch, fp);
ch = getchar();
}
printf("\n\n");
getchar();
fclose(fp);
}
// 创建文件函数
void create_file(FILE *fp, char *fname) {
// 获取用户输入的新文件名
printf("\t请输入新建的文件名:\n\t");
gets(fname);
// 创建文件并判断是否成功
if ((fp = fopen(fname, "w+")) == NULL) {
printf("\t不能打开文件!\n");
exit(0);
}
printf("\t%s文件已经创建好!\n\n", fname);
fclose(fp);
}
// 读取文件函数
void read_file(FILE *fp, char *fname) {
char ch;
// 获取用户输入的文件名
printf("\t请输入读取的文件名:\n\t");
gets(fname);
// 打开文件并判断是否打开成功
if ((fp = fopen(fname, "r")) == NULL) {
printf("\t不能打开文件!\n");
exit(0);
}
// 逐个读取文件中的字符并输出
printf("\t");
while ((ch = fgetc(fp)) != EOF) {
putchar(ch);
}
printf("\t\n\n");
fclose(fp);
}
阅读全文