关于学生信息录入(文件操作)的心得体会
生活随笔
收集整理的這篇文章主要介紹了
关于学生信息录入(文件操作)的心得体会
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
批評一下c prime plus在文件這一章的描述,明顯沒有譚浩強版本敘述得清楚。
首先分清楚fprintf、fscanf、fgetc、fputc、fgets、fputs這些的清晰含義(少部分語句摘自譚浩強c語言書本)
其中fgetc是從文件指針位置向后讀取一個字符并儲存到緩存區,而fputc是從緩存區讀取一個字符到文件的指針位置。我們看代碼來加強理解:
需要注意的是,往往我們逐個輸入的機會并不多,但是我們可以用這樣的方法來逐個復制文件中的內容達到copy的目的。此時用fgetc(st,fp)來獲取內容。
相比較而言,我們更常用fscanf和fprintf,他們的函數原型分別為:
①fgets:從文件中讀取一行數據存入緩沖區(fgets遇到回車才會結束,不對空格和回車做任何轉換就錄入到緩沖區,結束后再往緩沖區寫多一個\0,所以它是讀一行數據)
②fscanf:從文件中讀取一段數據存入緩沖區(fscanf遇到空格或回車就結束,它會把空格或回車轉換為\0,所以它是讀一小段數據)
--------------------接下來一道例題:
需要完成的操作:
用定義結構類型的方法,編寫程序建立一個具有學生學號、姓名、總分和聯系電話的記錄文件。編寫程序從鍵盤上輸入學號可以查到此人的其他信息。
大致步驟:
1.用定義結構類型的方法,編寫程序建立一個具有學生學號、姓名、總分和聯系電話的記錄文件。
2.編寫程序從鍵盤上輸入學號可以查到此人的其他信息。
完成這個操作需要注意的事項(部分事項寫在)
源代碼如下:
#include <stdio.h> #include <stdlib.h>struct stu {long num;char name[8];int grade;long phone; }stu[100]; //此處一百預留足夠大空間int re(long i) //搜索函數部分源代碼 {int num;FILE *fp;if((fp=fopen("test.txt", "r"))==NULL){printf("error");exit(0);}for (num=0; num<100; num++) {fscanf(fp,"%ld",&stu[num].num);fscanf(fp,"%s",stu[num].name);fscanf(fp,"%d",&stu[num].grade);fscanf(fp,"%ld",&stu[num].phone); //此處四個fscanf為了把文件中信息讀取到緩存區中if(stu[num].num==i)//判斷是否為尋找的學號信息{printf("%ld %s %d %ld\n",stu[num].num,stu[num].name, stu[num].grade,stu[num].phone);}}fclose(fp);return 0;}int main() //主體函數 {FILE *fp;int i = 0;long find=0;char Q = '\0';printf("please input the student's information\n");if((fp=fopen("test.txt", "wb+"))==NULL){printf("error");exit(0);}while (Q!='q') {printf("number?\n");scanf("%ld",&stu[i].num);printf("name?\n");scanf("%s",stu[i].name);printf("grade?\n");scanf("%d",&stu[i].grade);printf("phone?\n");scanf("%ld",&stu[i].phone);fprintf(fp,"%ld %s %d %ld",stu[i].num,stu[i].name, stu[i].grade,stu[i].phone); //把上面緩存區數據寫入文件(注意用空格分割,逗號測試時發現會出現多余數字,問題原因待查)i++;printf("again?\n"); //設置跳出部分防止死循環getchar(); //吸收回車scanf("%c",&Q);}fclose(fp);printf("find?\n");scanf("%ld",&find);re(find);return 0; }至此
總結
以上是生活随笔為你收集整理的关于学生信息录入(文件操作)的心得体会的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于指针的几个问题
- 下一篇: 关于位运算的错误问题