簡體   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