日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于学生信息录入(文件操作)的心得体会

發布時間:2025/5/22 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于学生信息录入(文件操作)的心得体会 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

批評一下c prime plus在文件這一章的描述,明顯沒有譚浩強版本敘述得清楚。

首先分清楚fprintf、fscanf、fgetc、fputc、fgets、fputs這些的清晰含義(少部分語句摘自譚浩強c語言書本)

  • 當我們需要對字符進行輸入輸出的時候,選擇fgetc和fputc,但是需要注意的是兩者的對象均是文件而并非過去我們使用gets這類時的屏幕。
    其中fgetc是從文件指針位置向后讀取一個字符并儲存到緩存區,而fputc是從緩存區讀取一個字符到文件的指針位置。我們看代碼來加強理解:
  • #include<stdio.h> #include<stdlib.h> //這里面包含了exit函數方便退出 int main() {char st;FILE *fp;if((fp=fopen("文件名","w"))==NULL){printf("error");exit(0);}printf("input a string('q' to quit)/n");do //當循環時會逐個讀取輸入的字符{st=getchar() //直接從鍵盤獲取一個字符fputc(st,fp) //此處注意fputc(需要輸入的字符,指針位置)}while(st!='q');fclose(fp);return 0;}

    需要注意的是,往往我們逐個輸入的機會并不多,但是我們可以用這樣的方法來逐個復制文件中的內容達到copy的目的。此時用fgetc(st,fp)來獲取內容。

  • 當我們需要對一串字符串輸入時,可以用fgets代替減少用fgetc的麻煩,下面舉出函數原型
  • fgets(存放的緩存區數組名稱,長度(從0開始),指針fp)//從文件讀取內容到緩存區fputs(讀取的緩存區數組名稱,寫入文件指針)//把內容寫入文件
  • fscanf和fprintf的應用
    相比較而言,我們更常用fscanf和fprintf,他們的函數原型分別為:
  • fscanf(指針,“%d”,&i) //這里假設前面已經聲明了i為整形,那么會從指針位置讀取一個字符給緩存區的i fprintf(指針,“%d”,i) //把緩存區的i寫入文件(注意可以用%d來限制格式)
  • fscanf、fprintf和fgets、fputs的區別
    ①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; }

    至此

    總結

    以上是生活随笔為你收集整理的关于学生信息录入(文件操作)的心得体会的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。