//号码添加 void input() { file *fp;
时间: 2023-12-28 07:01:42 浏览: 28
void input() {
file *fp;
fp = fopen("phonebook.txt", "a");
if (fp == NULL) {
printf("Error opening file!\n");
return;
}
char name[50];
char number[15];
printf("请输入联系人姓名:");
scanf("%s", name);
printf("请输入联系人号码:");
scanf("%s", number);
fprintf(fp, "%s %s\n", name, number);
fclose(fp);
printf("联系人信息已成功添加到电话簿中。\n");
}
这段代码是一个C语言函数,用于向电话簿文件中添加联系人的姓名和号码。首先,它打开一个名为“phonebook.txt”的文件,若文件打开失败,则会输出错误信息并返回。然后,它要求用户输入联系人的姓名和号码,并将这些信息写入文件中。最后,它关闭文件,并输出添加成功的消息。这样,就实现了向电话簿文件中添加联系人信息的功能。
相关问题
#include<stdlib.h> #define N 10 typedef struct { char no[15]; char name[10]; float score[3]; float aver; }STU; void Input_Info(STU a[], int n) { /********** Begin **********/ for(int i=0; i<n; i++) { scanf("%s%s", a[i].no, a[i].name); for(int j=0; j<3; j++) { scanf("%f", &a[i].score[j]); a[i].aver+=a[i].score[j]/3; } } /********** End **********/ } void Write_Info(STU a[], int n){ /********** Begin **********/ FILE *fp; fp=fopen("record", "a"); if(fp==NULL) { printf("不能打开文件!\n"); exit(0); } fwrite(a, sizeof(STU), n, fp); fclose(fp); /********** End **********/ }哪里错了
这段代码存在一些问题:
1. 在 `Input_Info` 函数中,`aver` 没有被初始化为0,导致平均分计算不正确。
2. 在 `Write_Info` 函数中,使用了 `fwrite` 将结构体数组写入文件,但结构体中包含指针类型的成员,无法正确地写入文件。
建议使用 `fprintf` 函数将结构体成员逐个写入文件,例如:
```
void Write_Info(STU a[], int n) {
FILE *fp;
fp = fopen("record", "a");
if (fp == NULL) {
printf("不能打开文件!\n");
exit(0);
}
for (int i = 0; i < n; i++) {
fprintf(fp, "%s %s %.2f %.2f %.2f %.2f\n", a[i].no, a[i].name, a[i].score[0], a[i].score[1], a[i].score[2], a[i].aver);
}
fclose(fp);
}
```
另外,建议在函数中添加一些错误处理机制,例如对文件打开失败进行处理等。
以#include<stdlib.h> #define N 10 typedef struct { char no[15]; char name[10]; float score[3]; float aver; }STU; void Input_Info(STU a[], int n) { /********** Begin **********/ int main() /********** End **********/ } void Write_Info(STU a[], int n){ /********** Begin **********/ /********** End **********/ }为格式完成假设有若干学生,每个学生有3门功课,从键盘上输入学生有关信息(学号、姓名、成绩),并计算其平均成绩,将原有数据和平均分保存在磁盘文件record中。
代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct {
char no[15];
char name[10];
float score[3];
float aver;
} STU;
void Input_Info(STU a[], int n) {
int i, j;
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的学号:", i + 1);
scanf("%s", a[i].no);
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", a[i].name);
printf("请输入第%d个学生的成绩:\n", i + 1);
for (j = 0; j < 3; j++) {
scanf("%f", &a[i].score[j]);
a[i].aver += a[i].score[j];
}
a[i].aver /= 3;
}
}
void Write_Info(STU a[], int n) {
FILE *fp;
int i;
if ((fp = fopen("record", "w")) == NULL) {
printf("文件打开失败!\n");
exit(0);
}
for (i = 0; i < n; i++) {
fprintf(fp, "%s %s %.2f %.2f %.2f %.2f\n", a[i].no, a[i].name, a[i].score[0], a[i].score[1], a[i].score[2], a[i].aver);
}
fclose(fp);
}
int main() {
STU a[N];
Input_Info(a, N);
Write_Info(a, N);
printf("数据已保存到文件record中!\n");
return 0;
}
```
主函数中,我们首先定义了一个 STU 类型的数组 a,用于存储学生的信息。然后调用 Input_Info 函数,从键盘上输入每个学生的信息并计算其平均成绩。最后调用 Write_Info 函数,将学生信息和平均成绩写入文件 record 中。
Input_Info 函数中,我们使用 for 循环逐个输入每个学生的信息,包括学号、姓名和成绩。在输入成绩时,我们使用了另一个 for 循环,依次输入每个学生的三门成绩,并计算平均成绩。
Write_Info 函数中,我们首先打开文件 record,如果打开失败则输出错误信息并退出程序。然后使用 for 循环将每个学生的信息和平均成绩写入文件中。最后关闭文件。
注意,在写入文件时,我们使用了 fprintf 函数,它与 printf 函数类似,但是可以将输出内容写入文件中。我们在文件中输出了每个学生的学号、姓名、三门成绩和平均成绩,中间用空格分隔。每个学生的信息占一行。