【问题标题】:Writing into txt file in C and printing data out用C写入txt文件并打印数据
【发布时间】:2017-11-01 00:23:14
【问题描述】:

我必须制作需要用户的程序:

输入姓氏(最多 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() 和 fprintf() 的结果是自找麻烦。
  • 阅读 fopengetline 的手册页,这可以帮助您使其正常工作

标签: c function file struct fopen


【解决方案1】:
  • 首先,确保检查来自fopen 的返回码。如果它无法打开文件,你应该在那里停止该功能。
  • 不要使用 scanf 扫描字符串。这是不安全的,因为字符串结果可能未绑定,请改用scanf_sfgets
  • 要计算最小值或总和,请使用累加器。一个变量,您在每一步更新以匹配您尝试计算的内容。例如。计算ints 数组的最小值的索引,

.

//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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-07
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多