用C写入txt文件并打印数据
Writing into txt file in C and printing data out
我必须制作程序,要求用户:
enter surname (17 letters max)
enter name (11 letters max)
enter subject (20 letters max)
enter number of points (number between 0 and 50)
输入需要重复,输入结束后将END写成姓氏,然后关闭txt文件
之后,我必须编写打开 txt 文件的函数,读取它并以这种格式打印其中的所有数据:
surname|name|subject|points
-----------------------------
-----------------------------
doe|jane|math|36
doe|john|programming|45
在同一个函数中,我必须找到哪个条目的点数最少,然后打印它(如果有两个点数相同,则打印找到的最后一个)。之后,在同一个函数中,我必须计算文件有多大并以字节为单位打印出来。
我设法编写了代码以输入名称并将其写入 txt 文件,但我无法编写程序的其余部分,有人知道如何做吗?
这是我的代码:
#include <stdio.h>
int main()
{
FILE *inputfile = NULL;
FILE *outfile = NULL;
struct imenik
{
char surname[17 + 1];
char name[11 + 1];
char subject[20 + 1];
int points;
} imen;
outfile = fopen("new.txt", "w");
printf("Enter surname: ");
scanf("%s ", imen.surname);
printf("Enter name: ");
scanf("%s ", imen.name);
printf("Enter course: ");
scanf("%s ", imen.subject);
printf("Enter points (0 - 50): ");
scanf("%d ", &imen.points);
printf("\n %s|%s|%s|%d", imen.name, imen.surname, imen.subject, imen.points);
fprintf(outfile, "\n %s|%s|%s|%d", imen.name, imen.surname, imen.subject, imen.points);
fclose(outfile);
return 0;
}
- 首先,确保检查
fopen
中的 return 代码。如果它不能打开文件,你应该停止那里的功能。
- 不要使用scanf 扫描字符串。这是不安全的,因为字符串结果可能未绑定,请改用
scanf_s
或 fgets
。
- 要计算最小值或总和,请使用 累加器。一个变量,您在每个步骤中更新以匹配您要计算的内容。例如。计算
int
s, 数组的最小值的索引
.
//the array
int arr[] = {3,1,4,2,3,0};
//accumulators
int min_value = INT_MAX; /* INT_MAX defined in "limits.h" */
int min_index = -1;
//steps
for( int i = 0; i < 6; ++i ) {
if( arr[i] < min_value ) {
min_value = arr[i];
min_index = i;
}
}
- 要循环,使用
do{...}while(...);
循环,并使用strncmp
比较C字符串(如果相同则returns 0
)。
我必须制作程序,要求用户:
enter surname (17 letters max)
enter name (11 letters max)
enter subject (20 letters max)
enter number of points (number between 0 and 50)
输入需要重复,输入结束后将END写成姓氏,然后关闭txt文件
之后,我必须编写打开 txt 文件的函数,读取它并以这种格式打印其中的所有数据:
surname|name|subject|points
-----------------------------
-----------------------------
doe|jane|math|36
doe|john|programming|45
在同一个函数中,我必须找到哪个条目的点数最少,然后打印它(如果有两个点数相同,则打印找到的最后一个)。之后,在同一个函数中,我必须计算文件有多大并以字节为单位打印出来。
我设法编写了代码以输入名称并将其写入 txt 文件,但我无法编写程序的其余部分,有人知道如何做吗?
这是我的代码:
#include <stdio.h>
int main()
{
FILE *inputfile = NULL;
FILE *outfile = NULL;
struct imenik
{
char surname[17 + 1];
char name[11 + 1];
char subject[20 + 1];
int points;
} imen;
outfile = fopen("new.txt", "w");
printf("Enter surname: ");
scanf("%s ", imen.surname);
printf("Enter name: ");
scanf("%s ", imen.name);
printf("Enter course: ");
scanf("%s ", imen.subject);
printf("Enter points (0 - 50): ");
scanf("%d ", &imen.points);
printf("\n %s|%s|%s|%d", imen.name, imen.surname, imen.subject, imen.points);
fprintf(outfile, "\n %s|%s|%s|%d", imen.name, imen.surname, imen.subject, imen.points);
fclose(outfile);
return 0;
}
- 首先,确保检查
fopen
中的 return 代码。如果它不能打开文件,你应该停止那里的功能。 - 不要使用scanf 扫描字符串。这是不安全的,因为字符串结果可能未绑定,请改用
scanf_s
或fgets
。 - 要计算最小值或总和,请使用 累加器。一个变量,您在每个步骤中更新以匹配您要计算的内容。例如。计算
int
s, 数组的最小值的索引
.
//the array
int arr[] = {3,1,4,2,3,0};
//accumulators
int min_value = INT_MAX; /* INT_MAX defined in "limits.h" */
int min_index = -1;
//steps
for( int i = 0; i < 6; ++i ) {
if( arr[i] < min_value ) {
min_value = arr[i];
min_index = i;
}
}
- 要循环,使用
do{...}while(...);
循环,并使用strncmp
比较C字符串(如果相同则returns0
)。