繁体   English   中英

用C写入txt文件并打印出数据

[英]Writing into txt file in C and printing data out

我必须制作程序,要求用户执行以下操作:

输入姓氏(最多17个字母)

输入姓名(最多11个字母)

输入主题(最多20个字母)

输入点数(0到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的返回码。 如果无法打开文件,则应在此处停止该功能。
  • 不要使用scanf扫描字符串。 这是不安全的,因为字符串结果可能未绑定,请改用scanf_sfgets
  • 要计算最小值或总和,请使用累加器 您将在每个步骤上更新一个变量以匹配您要计算的内容。 例如,计算int数组的最小值的索引,

//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字符串(如果相同,则返回0 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM