2017-05-31 53 views
0

我必須做出計劃,要求用戶:寫入TXT文件在C和打印數據進行

輸入姓(17個字母最大)

輸入名稱(包括11個字母最大)

進入受檢者(20個字母最大)

輸入點(編號0至50)

的數

輸入必要重複結束AFER你寫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; 

} 
+0

閱讀關鍵詞「循環」和「字符串長度」,這應該有助於您進一步瞭解。您可以提出有關什麼似乎是家庭作業的具體問題。 – Yunnosch

+0

不檢查fopen()和fprintf()的結果是在尋找麻煩。 – Gnqz

+0

閱讀「fopen」和「getline」的手冊頁,可以幫助您實現它 –

回答

1
  • 首先,確保從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,如果它們是相同的)。